メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2012年6月23日土曜日

[Objective-C][お勉強][メモ] クラスオブジェクトの初期化

クラスが静的変数やグローバル変数を使っている場合、initializeというメソッドで初期化するのが良いんでないかい、と書いてある。


ランタイムがinitializeメッセージを送るタイミングは以下のとおり。

1) メッセージを受信する前
2) 該当クラスのスーパークラスがinitializeメッセージを受信した後

よって、クラスは使用される前にinitializeメッセージを処理する機会が与えられる。

特に初期化する必要がなければ、initializeメソッドを実装する必要は無い。


注意点!
initializeを実装したスーパークラスObjAを継承したinitializeを実装しないクラスObjBがある場合、ObjBに対して送られたinitializeメッセージはObjBに該当するinitializeメソッドが
無いため、スーパークラスObjAのinitializeへと転送する。そのため、ObjAのinitializeメソッドが複数回実行されてしまう場合がある。

複数回実行されるのを防ぐために、以下のように実装する。

+(void)initialize
{
  if (self == [ObjA class]) {
    // ここで初期化処理
  }
}


とのこと。

0 コメント: