2012-06-04 142 views
4

究竟是dealloc方法的Cocos2D场景调用? 正确加载另一个场景?或者在场景加载完成后?
此外,如果我打算覆盖它,那么必须在dealloc方法中?
显然,cocos2D自动删除场景解除分配时连接到场景的所有节点。但是,如果我打算覆盖它,特别是我必须调用哪些方法? 那么,如何管理我的场景以确保它们无泄漏,100%? 在此先感谢!Cocos2D场景释放

回答

1

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

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

在您的场景释放器中,放置一个CCLOG以查看它的运行时间。我把每一个都确定下来。

通常,手动发布您使用从alloc,newcopy开始的方法创建的任何对象,无论它是否为Cocos2D对象或其他。其他创建方法(例如Cocos2D的node)不需要手动释放,除非您自己也手动选择了retain对象,如果您不打算将它作为子节点直接添加到另一个节点,这可能是明智的。如你所说,将一个节点作为孩子添加到另一个并不意味着它需要额外的release; Cocos2D将处理那个。

+0

哦......我想我现在明白了!不过,现在我拥有一个拥有cocos2D节点的对象的场景。每次我“刷新”它时,我都会使用init。这是否意味着我在泄漏记忆? (我只在dealloc方法中释放一次,再次感谢! – wayway

+0

道歉,你是对的,它是导致保留计数被实现的alloc,而不是init - 但它们通常一起使用。在init中执行 - 通常会在init中创建其他对象,因此如果在再次调用init之前没有释放这些对象,则可能会遇到问题。 –

1

您在场景类中分配的每个对象都没有作为子项添加到场景中,必须显式释放。

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

总是建议查看源代码(其中包含非常有用的注释),并了解如果您自定义场景类别时应完成的操作。