我四处搜索,无法找到与C ++无关的任何答案,这些答案并非完全相同。我有一个游戏,我为某些类别保留了NSMutableArray
我的精灵,因为它们太多而且它们经常出现/消失,无法引用它们中的每一个,并且它们的数量也各不相同。所以它们存储在一个数组中。
在我的didBeginContact
方法中,我抓住contact.bodyA.node
对象并将其传递给我写成的名为getSprite
的mehtod,其中列举了我拥有的对象数组,找到了匹配并将其作为SKSpriteNode
返回的一个,以便我可以使用SKSpriteNode
- animateWithFrames
等特定方法。但是,我经常使用这种方法,我想知道是否做了类似的事情:
SKSpriteNode *sprite = (SKSpriteNode*)[contact.bodyB.node parent];
也可以接受,然后只使用该指针来引用我的对象。它有效,但我不知道它是否会导致内存泄漏或其他问题。有什么建议? (我使用父方法的原因是因为实际上后面的精灵是碰撞所涉及的精灵)。
答案 0 :(得分:1)
我假设您正在使用ARC。默认情况下,指向该对象的本地指针是一个强指针,因为您没有以不同方式指定任何内容。因此,在本地sprite
指针存在的范围内,保证不会销毁该对象。它不会在该范围之外保持强有力的参考。 NSMutableArray
也保持对它包含的对象的强引用,因此当它们在该数组中时,对象不会被销毁。
答案 1 :(得分:0)
就内存泄漏而言,这不应该导致任何问题。它也应该更高效,因为它是直接链接到精灵,而不是迭代和搜索正确的精灵。我没有看到你为什么不能做到这一点的任何理由,除了可能会影响你游戏的未来计划的事实,因为对象的父关系成为逻辑的一部分,可能不应该这样做。是的,但是如果你集中代码,那么如果你改变精灵的层次结构就很容易改变它,那应该没问题。