SKSpriteNode をある SKNode から別の SKNode に移動したいと考えています。removeFromParent メソッドは、実際にスプライトの割り当てを解除します。
たとえば、このコードでは、MySprite は SKSpriteNode のサブクラスであり、文字列を出力する dealloc カスタム メソッドを使用して、オブジェクトの割り当てが解除されたことを知らせます。
SKNode *node1 = [SKNode node];
SKNode *node2 = [SKNode node];
//[self addChild:node1];
//[self addChild:node2];
MySprite *sprite = [MySprite spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(30, 30)];
[node1 addChild:sprite];
[sprite removeFromParent];
[node2 addChild:sprite];
この場合、スプライトは割り当て解除されます。スプライトへの強い参照を持つことで、removeFromParent を呼び出した後でもスプライトが生き続けるはずだと思っていましたが、そうではありません。
しかし、コメントを外した場合 [self addChild:node2]; スプライトは割り当て解除されませんでした。
私はここでかなり混乱しています。removeFromParent がオブジェクトの割り当てを解除した場合、スプライトは nil である必要があり、nil ノードを親に追加するとエラーが発生するはずです。ではない?ドキュメントには、removeFromParent: 「受信ノードをその親から削除する」とだけ書かれています。ただし、ここでメモリがどのように管理されるかについては何も述べていません。