2013-04-29 45 views
1

我刚刚将一个cocos2d v1.x项目迁移到了v2.x,并且一切似乎都没有问题。然后我打开了ARC。但现在,CCLayer的一个dealloc永远不会被调用。在转换过程中,该方法中的大部分内容都消失了,但只需要留下一个CCLog来指示图层何时解除分配。我不确定从无弧到弧有什么问题。各种消息来源提到,必须有其他的东西保留它。这很奇怪,因为它释放了所有这些变化。我还没有完成特定的代码(该层有很多代码)。但只是想看看有没有关于cocos2d v2.x + ARC的常见错误。cocos2d v2.x打开arc后,cclayer没有得到dealloc

+1

相关代码在哪里? – LearnCocos2D 2013-04-29 07:52:03

+2

我已经通过定义'OnExit()'和'OnEnter()'方法而不是分别在它们内部调用'[super onExit]'和'[super onEnter]'来烧毁。但除此之外,我们需要一些代码。 – 2013-04-29 16:01:50

+0

谢谢。我也检查过这些。 – kawingkelvin 2013-04-29 16:10:39

回答

1

刚解决这个问题。为什么cclayer得到了保留在ARC情况下(貌似好转换后),但之前不就是我宣布实例变量

@interface SomeObject { 
    CCNode *_parent; 
} 

和我没有为它定义一个@property的原因。

我在实现中的某处做了一个任务。在没有ARC的情况下似乎没有问题,因为在_parent上可能没有任何保留。但在ARC之后,似乎_parent现在是一个强大的参考。这是造成亲子风格的循环引用。我认为一个解决办法是使其成为一个不安全的未保存的。但我没有打扰,因为它是一些旧的代码,我实际上忘记了注释。我摆脱了这个伊娃。我认为这可能是第一次尝试转换为ARC时的一个陷阱。它也意味着不使用@property声明一个ivar并不是一个好习惯,当你转换旧项目时可以咬这个东西。