cocos2d v2.x cclayer在打开弧后没有得到dealloc

时间:2013-04-29 02:37:51

标签: cocos2d-iphone automatic-ref-counting

我刚刚将cocos2d v1.x项目迁移到v2.x,一切似乎都没问题。然后我打开了ARC。但现在,其中一个CCLayer的dealloc永远不会被调用。在转换过程中,该方法中的大多数内容都消失了,但只留下CCLog来指示何时取消分配图层。我不确定从无弧到ARC会出现什么问题。各种消息来源提到必须保留其他东西。这很奇怪,因为它解除了所有这些变化。我还没有详细介绍我的代码(该层有很多代码)。但只是想知道cocos2d v2.x + ARC是否有任何常见的陷阱。

1 个答案:

答案 0 :(得分:1)

刚修好了。 cclayer保留在ARC案例中(看似良好的转换后)但之前没有保留的原因是我已经声明了实例变量

@interface SomeObject {
    CCNode *_parent;
}

我没有为它定义@property。

我在实现中的某处做了一个任务。在没有ARC的情况下似乎很好。因为_parent可能没有任何保留。但在ARC之后,似乎_parent现在是一个强有力的参考。它导致父子样式循环引用。我认为一个解决办法就是让它变得不安全。但我没有打扰,因为它是一些旧的代码,我实际上忘了评论。我摆脱了这个伊娃。我认为这可能是第一次尝试转换为ARC时的陷阱。它也意味着在没有@property的情况下声明一个ivar不是一个好习惯,并且当你转换旧项目时可以咬这样的东西。