内存管理
cocos2d内存管理机制:引用计数(Ref类) 面试必考题!!!
- Sprite - Node - Ref
- Layer - Node - Ref
- Scene - Node -Ref
- Director - Ref
retain:引用计数+1
release:引用计数-1(当引用计数为0时,释放内存)
autoRelease:加入到自动释放池(这一帧绘制结束后所有在自动释放池里面的计数全部减1)
retain和releae/autoRelease必须搭配使用,否则会出现内存泄漏
create:引用计数为1
addChild():引用计数+1(调用retain())
remove():当前节点被移出 引用计数-1(调用release())
例子
例子1:
auto sp = Sprite::create("");
这一帧结束后引用计数为?
this->addChild(sp);
例子2:
auto sp = Sprite::create();
this->addChild(sp);
这一帧结束后引用计数为?
例子3:
auto sp = Sprite::create();
sp-retain();
这一帧结束后引用计数为?
this->addChild(sp);
sp->release();
例子4:
auto sp= Sprite::create("");
node1->addChild(sp);
sp->retain();
sp->removeFromParent();
这一帧结束后?
node2->addChild(sp);
sp->release();
例子5:
auto sp = Sprite::create("");
auto sp1 = Sprite::create("");
sp->addChild(sp1);
sp->retain();
this->addChild(sp);
sp->removeChild(sp1);
this->removeChild(sp);
内存优化机制:对象池技术
- 子弹工厂:BulletFactory(简单工厂)
- 子弹管理:BulletManager(单例)
- 成员:生存池、死亡池
- 方法:
- 添加子弹到生存池中,
- 回收子弹:从生存池到死亡池
- 查找死亡池中符合条件的子弹