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
Object *obj = new Object() ;// 计数器为 1
obj->autorelease(); //2
游戏循环结束 //1
obj->removeFromParent();// 0,自动被回收