Cocos2d iphone cocos2d场景解除分配和ccb节点

Cocos2d iphone cocos2d场景解除分配和ccb节点,cocos2d-iphone,ccscene,Cocos2d Iphone,Ccscene,我有一个简单的CCScene只包含一个节点,该节点是使用[CCBReader nodeGraphWithFile:方法从CoCoCosBuilder模板创建的 到目前为止,我没有在场景的dealloc方法中释放ccb节点,因为我希望它会自动释放。但是在分配分析器中,我注意到如果我在CCDirector中多次推/弹出场景,就会出现内存泄漏 如果我在场景的dealloc方法中实际release节点,该内存泄漏就会消失 为什么我需要释放节点,尽管我没有保留/初始化它?有什么我误解了吗?通过此创建的对象

我有一个简单的
CCScene
只包含一个节点,该节点是使用
[CCBReader nodeGraphWithFile:
方法从CoCoCosBuilder模板创建的

到目前为止,我没有在场景的
dealloc
方法中释放ccb节点,因为我希望它会自动释放。但是在分配分析器中,我注意到如果我在
CCDirector
中多次推/弹出场景,就会出现内存泄漏

如果我在场景的
dealloc
方法中实际
release
节点,该内存泄漏就会消失


为什么我需要释放节点,尽管我没有保留/初始化它?有什么我误解了吗?

通过此创建的对象会发生什么情况

[CCBReader nodeGraphWithFile:]
如果将其指定给保留属性,则将保留该属性;所以你需要明确地释放它。例如:

self.nodeGraph = [CCBReader nodeGraphWithFile:...];
如果将
nodeGraph
声明为保留属性,则在
[CCBReader nodeGraphWithFile:
中创建的自动删除对象将被该属性保留,您需要在
dealloc
中释放它

与不使用属性保留对节点对象的引用并将其直接添加到节点层次结构形成对比:

[self addChildNode:[CCBReader nodeGraphWithFile:...]];

在这种情况下,您不需要执行任何显式释放,因为您没有保留对象。

我没有将其指定给属性。我只是通过
[self addChildNode:[CCBReader nodeGraphWithFile:…]将其添加到场景中。这就是我困惑的原因。那么,您在
dealloc
方法中将发布发送到哪个对象?
[[self.children objectAtIndex:0]release]
这不好。。。很明显,
版本
缺失,否则双重发送会导致崩溃。要么cocos2d没有释放其子项(奇怪),要么CocosBuilder过度保留了它太多。。。查看
CCBReader
源代码…问题似乎是节点和animationManager之间的循环保留循环。有人在这里制造了一个问题: