Memory management 调用ReplaceSecene时未释放CCSpriteBatchNode

Memory management 调用ReplaceSecene时未释放CCSpriteBatchNode,memory-management,memory-leaks,cocos2d-iphone,Memory Management,Memory Leaks,Cocos2d Iphone,似乎在调用ReplaceSecene时,场景中的spriteBatchNodes不会被释放。每次我替换场景,“活着”的数量都会增加一个 存储在spriteBatchNode中的每个对象不仅仅是一个CCSprite,它是一个从CCSprite派生的类,具有额外的行为 什么会导致spriteBatchNode无法释放? 我添加到spriteBatchNode的节点也不会被释放 我取消了在作为spritebatchnode一部分的节点上运行的所有选择器的计划。您很可能遇到了错误。至少有一个节点仍保持打

似乎在调用ReplaceSecene时,场景中的spriteBatchNodes不会被释放。每次我替换场景,“活着”的数量都会增加一个

存储在spriteBatchNode中的每个对象不仅仅是一个CCSprite,它是一个从CCSprite派生的类,具有额外的行为

什么会导致spriteBatchNode无法释放? 我添加到spriteBatchNode的节点也不会被释放


我取消了在作为spritebatchnode一部分的节点上运行的所有选择器的计划。

您很可能遇到了错误。至少有一个节点仍保持打开状态,因此不会释放sprite批处理节点


当您在其他自定义集合(数组、字典等)中存储节点对象时,这种情况尤其常见。为了确保Cocos2D能够正确释放其内存,您需要在
-(void)cleanup
方法中释放这些集合,而不是
-(void)dealoc

您是对的。出于某种原因,释放包含对CCSpriteBatchNode的引用的数组并没有减少它们的保留计数。我必须执行[removeAllObjects]。还要确保您的CCSprite和CCSpriteBatchNode的属性已分配而不是保留,因为所有CCNode都已自动删除。