记得比较凌乱,主要是为了记录下平时遇到的问题,温故而知新


1,replaceScene和pushScene生命周期

场景切换时候,replaceScene会将上一个场景销毁,因为在切换场景时候,

CCDirector不会retain上一个场景的引用计数,在下一个循环的时候,检测到其引用计数为0,则会被回收。

pushScene则会retain上一个场景的引用计数,保证其不会被销毁,考虑这个,在做一些场景切换时候,要考虑上一个场景后面是否还需要,不销毁占用的内存如何。

看下面代码示例:


coco2d笔记_第1张图片



大致流程是,首先创建场景startAppScene,打印其引用计数结果为1,然后添加到舞台中,打印其饮用计数,结果为2,然后再点击菜单,切换另一个场景b,再打印StartAppScene的引用计数,结果为3,然后再在场景b中切换为场景StartAppScene,添加到舞台之前打印其引用计数,结果为1,添加到舞台后,其引用计数为2,如下截图:

coco2d笔记_第2张图片

如果换作replacescene,则切换到场景b后,场景startAppScene已经被销毁,需要再次重建才能加入到舞台中。

从源码来看:

coco2d笔记_第3张图片

setNextScene在主循环时候,通过drawScene调用