Objective c Cocos2D 2.0 ARC启用的非受控解除锁定

Objective c Cocos2D 2.0 ARC启用的非受控解除锁定,objective-c,memory-management,cocos2d-iphone,automatic-ref-counting,dealloc,Objective C,Memory Management,Cocos2d Iphone,Automatic Ref Counting,Dealloc,我最近将一个现有的Cocos2D项目从版本0.8迁移到2.0,并启用了ARC 我这样做的方式是通过苹果的空应用程序模板&然后添加cocos2d2.x模板中的代码,因为它有重大更改。之后,我添加了游戏中的代码,并对不推荐的代码和ARC问题进行了必要的更改 由于游戏运行正常,但没有达到预期效果,所以我没有动画&游戏占用了整个CPU的能量。从控制台上,我看到所有的东西都在创建后立即被释放。我的旧代码不是原因,因为它甚至发生在我的任何场景被推之前 编辑 我还再次重复了整个过程&从Cocos2D模板项目

我最近将一个现有的Cocos2D项目从版本0.8迁移到2.0,并启用了ARC

我这样做的方式是通过苹果的空应用程序模板&然后添加cocos2d2.x模板中的代码,因为它有重大更改。之后,我添加了游戏中的代码,并对不推荐的代码和ARC问题进行了必要的更改

由于游戏运行正常,但没有达到预期效果,所以我没有动画&游戏占用了整个CPU的能量。从控制台上,我看到所有的东西都在创建后立即被释放。我的旧代码不是原因,因为它甚至发生在我的任何场景被推之前

编辑
我还再次重复了整个过程&从Cocos2D模板项目中创建了一个启用ARC的版本,但在那里也是一样的。。这可能是正常的吗?

这不正常,尽管转换为ARC时常见问题。ARC将释放超出范围的对象,而在MRC下,alloc/init对象将保留在内存中(并泄漏)。检查您可能需要保留有力证明的地方

下面是一个在转换为圆弧之前起作用的示例:

-(void) someMethod
{
    id object = [[MyObject alloc] init];
}
在MRC下,someMethod返回后,对象将留在内存中(泄漏)。在ARC下,ARC在方法返回时清理对象。最简单的修复方法是将对象转换为ivar(又名实例变量,类的成员)

还要检查单身人士。根据其实现方式,Singleton类可能会立即解除锁定。例如,如果静态实例被声明为“弱”或“不安全”未恢复


您还应该运行Xcode分析器(Build->Analyze)来获取潜在问题的指针。

或多或少都是这样。。我希望它可以是框架内的东西,但经过长时间的重构,现在一切都按预期运行,谢谢!