我想将 SKSpriteNode 从一个 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 之后,对 sprite 的强引用也应该使其保持活动状态,但事实并非如此。
但是如果我取消注释 [self addChild:node2]; 精灵没有被释放。
我在这里很困惑。如果 removeFromParent 释放了对象,则 sprite 应该是 nil 并且我应该得到一个错误,将 nil 节点添加到父节点。不是吗?文档只是说 removeFromParent:“从其父节点中删除接收节点。” 但它没有说明这里是如何管理内存的。