内存管理

内存管理是游戏开发中非常重要的内容,游戏的流畅性和响应及时性都和此有关,内存管理不好,游戏性能下降不说,还容易出现异常。
cocos2dx内存管理模拟oc的引用计数模式。现在内存管理技术主要分为两种:一是引用技术,一是垃圾回收。引用技术原理通过给每个对象维护一个引用计数器,记录该对象被引用的次数。当计数器为0,表示该对象生命周期结束,自动触发对象的回收和释放。每个程序片段还必须负责的维护引用计数,繁琐的管理对象生命周期还必不可少。垃圾回收原理,它会自动跟踪每个对象,以便找到所有对象,回收不需要的引用。垃圾回收器是一个低级别的线程,指不定什么时候回收,不可控。
cocos2dx采用了引用计数和垃圾回收结合的机制,ccobject每个对象都有一个引用计数器,通过retainCount可以获取数值。构造创建时,引用计数加1,其他地方使用,调用retain方法加1,使用完成调用release方法减1,当引用计数器为0时,就会释放回收此对象。
对象创建后,调用autorelease方法,会添加到对象管理池PoolManager, CCPoolManager::getInstance()->addobject(this); 由回收池进行管理,PoolManager会在每次循环结束后调用pop()方法,pop()方法里会调用内存池中所有对象的release()方法,当引用计数器为0,对象就被释放回收。
Object *obj = new Object() ;// 计数器为 1
addChild(obj); //计数器为 2
obj->removeFromParent();// 1
只有再调用一次obj->release();方法,对象才能被回收;
现在使用自动管理器就可以解决这个问题
Object *obj = new Object() ;// 计数器为 1
obj->autorelease(); //2
游戏循环结束 //1
obj->removeFromParent();// 0,自动被回收

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...