とあるクラスの初期化処理
+(id)layerWithSceneId: (NSInteger) sceneId { return [[[self alloc] initWithSceneId: sceneId] autorelease]; } -(id)initWithSceneId: (NSInteger)sceneId { }
となっています。
本の説明によると、
layerWithSceneId: メソッドでは、initWithSceneId: メソッドで初期化した物を autoreleaseしてから返しています。
通常、CCNode を継承したクラスであれば、[クラス名 node];を呼べば、メモリーの確保からinit メソッドでの初期化、autoreleaseしたオブジェクトを返してくれます。
しかし、node メソッドでは、initWithSceneId: のような独自作成のメソッドは、呼んでくれません。
そこで、ここでは、autoreleaseしたオブジェクトをinit〜メソッドとは別に用意して、autorelease されたオブジェクトを扱う。というcocos2d の流儀に従ったクラスにしています。新しいクラスを作る場合、常にこの流儀に従って作っておくと、何かと便利です。
と有ります。(cocos2d for iPhone レッスンノートより抜粋)
ちなみに、nodeメソッドは、下記の通り
+(id)node { return [[[self alloc] init] autorelease]; }
それで、いちいちこういう書き方をしているのかぁ。。。。
ただ、ひねくれている私は、外部から、initWithSceneId: を呼んだらダメなの?とか思ってしまうけど。。。
この辺は、まだよく分かってません。。
ちなみに、
C++とちがって、クラスも、オブジェクトです。
そして、プラスから始まっている、クラスメソッドに関しては、new等しなくても、メッセージを送れます。
ということは、ヘッダをimport していれば、どこからでも参照できるのかな?