我有一个简单的方法CCScene
,它只包含一个从 CocosBuilder 模板创建的节点[CCBReader nodeGraphWithFile:]
。
到目前为止,我没有dealloc
在场景的方法中释放 ccb 节点,因为我希望它会自动释放。但是在分配分析器中,我注意到如果我在CCDirector
.
如果我实际上是场景方法release
中的节点,这个内存泄漏就会消失。dealloc
为什么我需要释放节点,尽管我没有保留/初始化它?有什么我误解了吗?
我有一个简单的方法CCScene
,它只包含一个从 CocosBuilder 模板创建的节点[CCBReader nodeGraphWithFile:]
。
到目前为止,我没有dealloc
在场景的方法中释放 ccb 节点,因为我希望它会自动释放。但是在分配分析器中,我注意到如果我在CCDirector
.
如果我实际上是场景方法release
中的节点,这个内存泄漏就会消失。dealloc
为什么我需要释放节点,尽管我没有保留/初始化它?有什么我误解了吗?
通过这个创建的对象会发生什么?
[CCBReader nodeGraphWithFile:]
如果您将其分配给保留属性,它将被保留;所以你需要明确地释放它。例如:
self.nodeGraph = [CCBReader nodeGraphWithFile:...];
如果nodeGraph
声明为保留属性,则在中创建的自动释放对象[CCBReader nodeGraphWithFile:]
将被该属性保留,您需要在dealloc
.
将此与不使用属性保持对节点对象的引用并将其直接添加到节点层次结构进行对比:
[self addChildNode:[CCBReader nodeGraphWithFile:...]];
在这种情况下,您不需要进行任何显式释放,因为您没有保留自己的对象。