内存管理

前端之家收集整理的这篇文章主要介绍了内存管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
内存管理是游戏开发中非常重要的内容,游戏的流畅性和响应及时性都和此有关,内存管理不好,游戏性能下降不说,还容易出现异常。
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,自动被回收

猜你在找的Cocos2d-x相关文章