Cocos2D 2.0 ARC启用了不受控制的deallocs

时间:2012-10-01 03:52:22

标签: objective-c memory-management cocos2d-iphone automatic-ref-counting dealloc

我最近将现有的Cocos2D项目从0.8版迁移到了2.0版。启用ARC。

我这样做的方式是Apple的空应用程序模板&然后添加Cocos2d 2.x模板中的代码,因为它有重大变化。之后我添加了游戏中的代码&对已弃用的代码进行了必要的更改对于ARC问题。

由于游戏正在运行,但没有达到预期,我没有动画和&游戏占用了整个CPU的能力。从控制台我看到一切都在它创建后被解除密切。我的旧代码不是原因,因为它甚至在我的任何场景被推动之前就已经发生了。

enter image description here

修改 我还重复了整个过程&从Cocos2D模板项目中制作了一个支持ARC的版本,但同样也是如此。这可能是正常的事吗?

1 个答案:

答案 0 :(得分:1)

这是不正常的,虽然转换为ARC时常见问题。 ARC将释放超出范围的对象,而在MRC下,alloc / init对象将保留在内存中(并泄漏)。检查您需要保留强大参考的位置。

这是一个在转换为ARC之前有效的示例:

-(void) someMethod
{
    id object = [[MyObject alloc] init];
}

在MRC下,对象在someMethod返回后停留在内存中(泄漏)。在ARC下,ARC在方法返回时清理对象。最简单的解决方法是将对象转换为ivar(也就是实例变量,类的成员)。

同时检查单身人士。根据其实现方式,Singleton类可能会立即释放。例如,如果静态实例声明为__weak或__unsafe_unretained。

您还应该运行Xcode Analyzer(Build - > Analyze)来获取潜在问题的指示。