我最近将现有的Cocos2D项目从0.8版迁移到了2.0版。启用ARC。
我这样做的方式是Apple的空应用程序模板&然后添加Cocos2d 2.x模板中的代码,因为它有重大变化。之后我添加了游戏中的代码&对已弃用的代码进行了必要的更改对于ARC问题。
由于游戏正在运行,但没有达到预期,我没有动画和&游戏占用了整个CPU的能力。从控制台我看到一切都在它创建后被解除密切。我的旧代码不是原因,因为它甚至在我的任何场景被推动之前就已经发生了。
修改 我还重复了整个过程&从Cocos2D模板项目中制作了一个支持ARC的版本,但同样也是如此。这可能是正常的事吗?
答案 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)来获取潜在问题的指示。