cocos2d:内存管理机制
1:引用计数
- Sprite --Node --Ref
- Layer --Node --Ref
- Scene --Node --Ref
- Director–ref
2:retain:引用计数+1
- release:引用计数-1,当引用计数为0时,释放内存
- autoRelease:加入到自动释放池
(这一帧绘制结束后在所有自动释放池中的引用计数全部减1) - ratain和release /autoRealse 必须搭配使用
3:create (new -autoRealse):引用计数为1
- addChild():引用计数+1(retain)
- remove:当前节点被移除,引用计数减1(release)
4:例子
- 1:
auto sp =Sprite::create("");//1
这一帧结束后引用计数为?//0
this->addChild(sp)//报错,内存以及被释放child!=nullptr - 2:
auto sp =Sprite::create("");//1
this->addChild(sp);//2
这一帧结束后引用计数为?//1 - 3:auto sp=Sprite::create();//1
auto sp1=Spricte::create();//1
sp->addChild(sp1);//1
sp->retain();//2
this->addChild(sp);//3
sp->removeChild(sp1);//3
this->removeChild(sp);//2
5 :内存优化机制:对象池技术
- 子弹工厂:BulletFactory(简单工厂)
- 子弹管理: BulletManger(单实例)
- 成员:生成池/死亡池
- 方法:
- 1:添加子弹到生存池 ,
- 2:回收子弹:从生存池到死亡池
- 3:查找死亡池中符合条件的子弹
6:实例
6.1:创建子弹生存池和死亡池(存放子弹)
list<Bullet