Cocos2D场景释放

时间:2012-06-04 20:13:51

标签: iphone objective-c ios cocos2d-iphone

何时调用dealloc场景的Cocos2D方法? 正好在加载另一个场景时?或者场景加载完毕后?
另外,如果我计划覆盖它,那么在dealloc方法中必须采用什么? 显然,cocos2D会在场景解除分配时自动删除附加到场景的所有节点。但是,如果我计划覆盖它,特别是我必须调用哪些方法? 那么如何管理我的场景以确保它们无泄漏,100%? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您在场景类中分配的每个对象(未作为子元素添加到场景中)必须显式释放。

当您使用另一个场景对象替换它(使用replaceScene方法)或从场景堆栈中弹出场景时,会释放场景(并且大多数时候如果您没有将其保留在其他位置则取消分配)。

始终建议查看源代码(包含非常有用的注释),并了解在自定义场景类时应该做些什么。

答案 1 :(得分:1)

CCScene的解除分配器遵循与任何其他对象相同的规则。它将在CCScene的引用计数达到零时运行。

默认情况下,一个场景并不关心将要替换它的另一个场景,但如果您正在通过转换更改场景,则会有一段时间同时存在两个场景。当转换结束时,转换将释放对第一个场景的引用,这可能是最后一个这样的引用,然后第一个场景将被释放。

在场景解除分配器中,放置CCLOG以确切了解它的运行时间。我每个都放一个以确保。

通常,使用以allocnewcopy开头的方法手动释放您创建的任何对象,无论它是否为Cocos2D对象。其他创建方法,例如Cocos2D的node,不需要手动发布,除非您自己手动选择retain对象,如果您不打算将其添加为一个孩子马上到另一个节点。

正如您所说,将一个节点作为一个孩子添加到另一个节点并不意味着它需要额外的release; Cocos2D将处理那个。