Cocos2d(ARC)不释放自定义CCSprite类的内存

时间:2013-01-11 14:51:26

标签: iphone ios objective-c opengl-es cocos2d-iphone

我正在使用Cocos2d(ARC)。我正在制作一个游戏,我正在使用自定义CCSprite类

+(id)createMySprite
{
   return [[self alloc] initMy] ;
}

这是我的CCSprite类。我在哪里分配内存。我不能因为ARC而写自动释放。我有两个CCLayer类。在第一类只有播放按钮,点击该按钮,它取代屏幕,并移动第二个屏幕。在第二类中,我获取了许多自定义CCSprite类。当我替换为第一个CCLayer类时,它永远不会释放第二类的内存,内存将不断增加。然后在达到20-30 MB的实时内存后崩溃。 所以我需要帮助。

Allocation

基本上,标题与ARC兼容。源代码不支持ARC。 因此,您在不启用ARC的情况下将Cocos2D编译为静态库,然后在代码中链接到它,您可以安全地将ARC用于您的类和Cocos2D元素的自定义子类。 如果我错了,请纠正我,但在项目中使用ARC应该没有问题,并且说使用ARC的CCSprite子类并不会手动放置保留和释放消息。正确?

1 个答案:

答案 0 :(得分:0)

我知道这已经存在了很长一段时间,并且很可能你已经解决了它,但是对于那些正在阅读并仍在寻找答案的人来说,这是我对CCNodes的理解并保留了周期。

基本上我有关于此的博客,我有一个设计模式可以解决保留的CCNode问题。链接在这里。 http://www.rotategears.com/development/ccnode-arc-memory-management/

在坚果壳中,如果您创建一个节点ivar并且没有指定引用的强度,它将获得强引用。然后,当您将其作为子项添加到也将维护引用的节点时,您将创建一个双重保留,当操作系统尝试释放它时会导致问题。 ivar必须是星期,这样你才能在这个容器中保留1。话虽如此,你必须小心如何将这个弱引用分配给ivar,因为它在你指定之前需要引用计数为1,否则ivar将被设置为nil。