Objective-C指向同一对象的多个指针?

时间:2014-12-15 18:26:07

标签: objective-c pointers sprite-kit

我四处搜索,无法找到与C ++无关的任何答案,这些答案并非完全相同。我有一个游戏,我为某些类别保留了NSMutableArray我的精灵,因为它们太多而且它们经常出现/消失,无法引用它们中的每一个,并且它们的数量也各不相同。所以它们存储在一个数组中。

在我的didBeginContact方法中,我抓住contact.bodyA.node对象并将其传递给我写成的名为getSprite的mehtod,其中列举了我拥有的对象数组,找到了匹配并将其作为SKSpriteNode返回的一个,以便我可以使用SKSpriteNode - animateWithFrames等特定方法。但是,我经常使用这种方法,我想知道是否做了类似的事情:

SKSpriteNode *sprite = (SKSpriteNode*)[contact.bodyB.node parent];

也可以接受,然后只使用该指针来引用我的对象。它有效,但我不知道它是否会导致内存泄漏或其他问题。有什么建议? (我使用父方法的原因是因为实际上后面的精灵是碰撞所涉及的精灵)。

2 个答案:

答案 0 :(得分:1)

我假设您正在使用ARC。默认情况下,指向该对象的本地指针是一个强指针,因为您没有以不同方式指定任何内容。因此,在本地sprite指针存在的范围内,保证不会销毁该对象。它不会在该范围之外保持强有力的参考。 NSMutableArray也保持对它包含的对象的强引用,因此当它们在该数组中时,对象不会被销毁。

答案 1 :(得分:0)

就内存泄漏而言,这不应该导致任何问题。它也应该更高效,因为它是直接链接到精灵,而不是迭代和搜索正确的精灵。我没有看到你为什么不能做到这一点的任何理由,除了可能会影响你游戏的未来计划的事实,因为对象的父关系成为逻辑的一部分,可能不应该这样做。是的,但是如果你集中代码,那么如果你改变精灵的层次结构就很容易改变它,那应该没问题。