cocos2d学习笔记----内存管理

332 阅读1分钟

内存管理

cocos2d内存管理机制:引用计数(Ref类) 面试必考题!!!

  • Sprite - Node - Ref
  • Layer - Node - Ref
  • Scene - Node -Ref
  • Director - Ref

retain:引用计数+1

  • release:引用计数-1(当引用计数为0时,释放内存)
  • autoRelease:加入到自动释放池(这一帧绘制结束后所有在自动释放池里面的计数全部减1)
  • retainreleae/autoRelease必须搭配使用,否则会出现内存泄漏

create:引用计数为1

  • addChild():引用计数+1(调用retain())
  • remove():当前节点被移出 引用计数-1(调用release())

例子

      例子1auto sp = Sprite::create("");//1
        这一帧结束后引用计数为?//0
        this->addChild(sp);//报错,内存已经被释放 child != nullptr
      例子2auto sp = Sprite::create();//1
        this->addChild(sp);//2
        这一帧结束后引用计数为?//1
      例子3auto sp = Sprite::create();//1
        sp-retain();//2
        这一帧结束后引用计数为?//1
        this->addChild(sp);//2
        sp->release();//1
      例子4:
        auto sp= Sprite::create("");//1
        node1->addChild(sp);//2
        sp->retain();//3
        sp->removeFromParent();//2
        这一帧结束后?//1
        node2->addChild(sp);//2
        sp->release();
      例子5:
        auto sp = Sprite::create("");//1
        auto sp1 = Sprite::create("");//1
        sp->addChild(sp1);//sp 1/sp1 2
        sp->retain();//sp 2
        this->addChild(sp);//sp 3
        sp->removeChild(sp1);//sp 3/sp1 2
        this->removeChild(sp);//sp 2

内存优化机制:对象池技术

  • 子弹工厂:BulletFactory(简单工厂)
  • 子弹管理:BulletManager(单例)
    • 成员:生存池、死亡池
    • 方法:
      1. 添加子弹到生存池中,
      2. 回收子弹:从生存池到死亡池
      3. 查找死亡池中符合条件的子弹