Ios7 如何在SKSpriteNode节点之间移动SKSpriteNode
我想将一个SKSpriteNode从一个SKNode移动到另一个SKNode。removeFromParent方法实际上取消分配精灵 例如,在这段代码中,MySprite是SKSpriteNode的一个子类,带有一个dealloc自定义方法,该方法输出一个字符串,只是为了让我知道对象已被解除分配:Ios7 如何在SKSpriteNode节点之间移动SKSpriteNode,ios7,automatic-ref-counting,sprite-kit,skspritenode,sknode,Ios7,Automatic Ref Counting,Sprite Kit,Skspritenode,Sknode,我想将一个SKSpriteNode从一个SKNode移动到另一个SKNode。removeFromParent方法实际上取消分配精灵 例如,在这段代码中,MySprite是SKSpriteNode的一个子类,带有一个dealloc自定义方法,该方法输出一个字符串,只是为了让我知道对象已被解除分配: SKNode *node1 = [SKNode node]; SKNode *node2 = [SKNode node]; //[self addChild:node1]; //[self addCh
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:“从其父节点中删除接收节点。”但它没有说明此处如何管理内存。removeFromParent:不会解除分配节点,除非其父节点是唯一持有该节点引用的人(通过父节点->子节点关系) 在您的情况下,若sprite在removeFromParent上解除分配,您将看到添加nil子项的异常,正如您所建议的。这就得出结论,事实并非如此 这让我知道发生了什么: 但如果我取消注释[self addChild:node2];精灵没有被释放 您可能正在检查本地范围之外的sprite
{
//Local scope starting
SKNode *node = [SKNode node];
//Node created and exists here
//[self addChild:node];
//Node is not added to scene or parent node(self)
SKSPriteNode* sprite = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(30, 30)];
[node addChild:sprite];
}
/*
Local scope ended if node isn't added to parent(self) it get deallocated,
along with the content.
In case //[self addChild:node] was uncommented, node would not be deallocated
and sprite would still be "alive"
*/
只要有人持有一个对象的引用,它就不会被释放 有一种方法可用于此目的:
SKNode.moveToParent(parent: SKNode)
将节点移动到场景中的新父节点。节点在场景坐标中保持其当前位置
资料来源:
:谢谢。对,应该是范围。我为精灵创建了一个实例变量,但它没有被释放。