Objective-C

とあるクラスの初期化処理

+(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 していれば、どこからでも参照できるのかな?