initializeが二回呼ばれてへこー
クラスオブジェクトに対するメソッド、
+(void)initialize { // クラスオブジェクトの初期化 }
はそのクラスが始めて使われる場合に呼び出される。
ただし、
継承階層にあるクラスが継承先でinitializeを実装していない場合、
その継承先クラスが始めて使われる場合も、
initializeがスーパークラスに対して呼ばれてしまう。
即ち、
Chara +(void)initialize Hoge : Chara //...
とあった場合、
Charaが使われる場合にinitializeが実行され、
Hogeが使われる場合にもCharaのinitializeが実行される。
二回初期化が呼ばれて大抵おかしくなる。
荻原本では、
+(void)initialize { static BOOL nomore = NO; if (nomore) { return; } ... nomore = YES; }
のようにすることを推奨している。
ぐああああああああああああ。
はまった。