场景的dealloc
方法究竟是什么时候调用的?Cocos2D
就在加载另一个场景时?还是在场景加载完成后?
此外,如果我打算覆盖它,dealloc 方法中必须包含什么?
显然,cocos2D
当场景被解除分配时,会自动删除附加到场景的所有节点。但是,如果我打算覆盖它,具体我必须调用哪些方法?那么如何管理我的场景以确保它们 100% 无泄漏?提前致谢!
2 回答
您在场景类中分配的每个未作为子对象添加到场景中的对象都必须显式释放。
replaceScene
当您用另一个场景对象替换它(使用该方法)或从场景堆栈中弹出它时,会释放一个场景(如果您没有将其保留在其他地方,则大多数情况下会释放它) 。
始终建议查看源代码(其中包含非常有用的注释)并了解如果您自定义场景类应该做什么。
CCScene 的释放器遵循与任何其他对象相同的规则。当对 CCScene 的引用计数达到零时,它将运行。
默认情况下,一个场景不关心另一个即将替换它的场景,但是如果您使用过渡更改场景,则会有一段时间同时存在两个场景。当过渡结束时,过渡将释放它对第一个场景的引用,这可能是最后一个这样的引用,然后第一个场景将被释放。
在您的场景释放器中,放置一个 CCLOG 以准确查看它何时运行。我在每个中放了一个以确保。
alloc
通常,手动释放您使用以、new
或开头的方法创建的任何对象copy
,无论它是否为 Cocos2D 对象或其他对象。其他创建方法,例如 Cocos2D node
,不需要手动释放,除非您retain
自己也手动选择了对象,如果您不打算立即将其作为子节点添加到另一个节点,这可能是可取的。
正如您所说,将一个节点作为子节点添加到另一个节点并不意味着它需要额外的release
; Cocos2D 会处理那个。