我有一个简单的CCScene
,其中只包含一个使用[CCBReader nodeGraphWithFile:]
方法从CocosBuilder模板创建的节点。
到目前为止,我没有在场景的dealloc
方法中释放ccb节点,因为我预计它会被自动释放。但是在分配探查器中,我注意到如果我在CCDirector
中多次按下/弹出场景,就会发生内存泄漏。
如果我实际release
场景的dealloc
方法中的节点,则此内存泄漏消失。
为什么我需要释放节点,虽然我没有保留/ init它?有什么我误解了吗?
答案 0 :(得分:0)
通过此创建的对象会发生什么?
[CCBReader nodeGraphWithFile:]
如果将其分配给保留属性,它将被保留;所以你需要明确地释放它。 E.g:
self.nodeGraph = [CCBReader nodeGraphWithFile:...];
如果nodeGraph
被声明为保留属性,则[CCBReader nodeGraphWithFile:]
中创建的自动释放对象将被属性保留,您需要在dealloc
中释放它。
将此与不使用属性进行对比,以保留对节点对象的引用并将其直接添加到节点层次结构中:
[self addChildNode:[CCBReader nodeGraphWithFile:...]];
在这种情况下,你不需要做任何明确的发布,因为你没有保留自己的对象。