内存释放[置顶] Cocos2d-x 内存管理心得
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
言前:
在C++中,在堆上分配动态内存和释放动态内存的方法是 new 和 delete,在请申内存后之,如果不必使了就须要delete掉,不然就会形成内存的溢出。附录:new的动态内存,只要在程序结束之前delete就行,这样在程序结束之前就能够把请申到的堆内存返还给系统,但是在现实的编程过程当中,一般为了实时释放不必的空间高提内存的用使率而在不须要的位置用调delete来释放,以免形成内存占用太高和程序结束之前掉忘,从而形成的内存溢出。
在cosos2d-x中,对于引擎本身而言,自带了autorelease 方法,可以将象对的指针参加push到主动释放池中。在每一帧结束的时候用调pop对池中的象对指针行执 出退主动释放池,并且根据引用计数来实现主动释放。这一连串的作动,在看了几天的博客文章,“消化解理”后,现发把自己弄懵了。
还是从头再来吧,接着从源码本身出发去解理,由于是在试调魔塔DEMO的时候涌现了很多内存泄漏提示(vs2010+ cocos2d-x 2.1.3 + VLD),本着决坚消化吸收cocos2d-x中的内存管理方法,重复试调了好多遍,在现来做个结总。
首先,cocos2d-x官方推荐的生成象对方法 是用使CREATE_FUNC宏,宏中已经有一个autorelease()用调,所以只须要直接 className *pObject = className::create(),用调就行,小充补下:如果须要用使内存主动管理的功能,须要直接或接间承继CCObject类就行。当你参加前当,基本不须要对该象对的指针行进释放之类的作操,当然是没行进pObject->retain()(须要再行执pObject->release())作操。很便利的管理了须要在堆上分配的内存。推荐用使autorelease()来管理对内存的释放。
其次,对于分配的内存有前当类数据成员和部局用作域中的部局象对的指针,类数据成员直接autorelease(),在类的生命周期结束时,类的析构函数中不须要再次释放了,因为引擎主动帮你释放了,对于部局的象对的指针,用调autorelease()后也不须要再次去释放了,都交给引擎去释放吧。
最后,对于手作动操而言 new作操和delete作操成对涌现就行,类数据成员则在析构函数中delete,以免提早释放了,形成内存作操误错。再者如果行执className *pObject = new className(); pObject->autorelease()亦可用使引擎的内存管理功能,前提是className 直接或接间承继自CCObject类。
第一次写cocos2d-x内存管理的心得,请大家看着玩,参考了很多大神的内存管理博文,其中由于自己水平限有,没能好好解理,反而把自己弄晕了,实在对不起各位大神们的苦辛分享,再次感激大神们分享的博文。。
望希此篇文章能给须要的友人一点鉴借。。。
文章结束给大家分享下程序员的一些笑话语录:
某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.