クラスが静的変数やグローバル変数を使っている場合、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 コメント:
コメントを投稿