2

SKNode は+nodeメソッドのみを提供します。

これを行う場合:

+ (instancetype)node {
    CustomNode *body = [CustomNode node]; // infinite loop
}

これを行う場合:

+ (instancetype)node {
    CustomNode *body = [super node]; // instance of SKNode, not CustomNode
}

コンストラクターをオーバーライドできるように、便利なコンストラクターしか持たないクラスをどのようにサブクラス化しますか? それとも、独自の+customNodeメソッドを作成するのがベスト プラクティスですか?

4

3 に答える 3

7

[... alloc] init]SKNode サブクラスで使用できないとは誰も言っていません。結局、SKNode は NSObject のサブクラスです。+node便利な方法です。

+ (instancetype)node {
    CustomNode *body = [[self alloc] init];
    return body;
}

これには何も問題はありません。

于 2013-12-31T19:29:48.457 に答える
1
+ (instancetype)node {
    CustomNode *body = [CustomNode node]; // infinite loop
}

同じメソッドを呼び出しているため、無限ループが予想される結果です。もう1つは次のとおりです。

+ (instancetype)node {
    CustomNode *body = [super node]; // instance of SKNode, not CustomNode
}

ここでの目標は、CustomNodeget を期待どおりに初期化することです。UIViewControllerたとえば、次のように作成する場合も同じです。

if ( self == [super initWithNibName:nibName bundle:bundle])

標準の初期化を行いたい。後で行うことはCustomNode、カスタム ノードを作成することです。:)

+ (instancetype)node {
    CustomNode *body = [super node];
    // My own logic goes here

   return body;
}
于 2013-12-31T19:39:34.123 に答える