内存管理

Cocos2d-X3.0 刨根问底四----- 内存管理源码分析

上一篇,我们完整的分析了Director这个类,并提到了Director这个继承了Ref这个类,大致看了一下Ref这个类,是一个关于引用计数的类,从而我们可以推断Cocos2d-x用了一种引用计数的方式来管理内存对象,这一章我们刨根问底Cocos2d-x是如何实现内存管理及我们如何在实际项目开发中应用Cocos2d-x的内存管理。从这块定义可以看到一个问题,这个函数并不是线程安全的,可以知道Cocos2d-x不适合多线程程序。在这个对象销毁时通知js管理器清除这个对象。

1.cocos2dx内存管理和CCArray,CCMenuItem

当对象增加一次引用时,计数器加1;而对象失去一次引用时,计数器减1;当引用计数为0时,标志着该对象的生命周期结束,自动触发对象的回收释放。引用计数解决了对象的生命周期管理问题,但堆碎片化和管理烦琐的问题仍然存在。4cocos2dx内存管理A手动管理Cocos2dx采用工厂方法创建对象,所有生成的对象均在堆上,所以Cocos2dx采用了引用计数的方法管理内存。

cocos2dx内存管理的一些看法

总结如下:1.当使用create的时候,都是被加入了autorelease的,所以如果需要使用的话,要记得retain一下啊;2.如果使用的是new,那么就要记得不用的时候一定要release啊;3.一般来说cocos2dx的CCNode都是有create的,比如CCArray不用担心释放问题;4.vector这些c++函数不要忘记释放内存啊;5.最好是不要混用,如果你对他们很清楚,ok,可以的;6.为了格式统一,我一般喜欢自己创建create函数。

cocos2dx的内存管理机制---lamp兄弟连

下面我们通过俩个例子来理解一下这个内存管理机制。cclayer::init()){returnfalse;}CcmenuItemImage*pCloseItem=CcmenuItemImage::create;Ccmenu*pMenu=Ccmenu::create;this->addChild;this->m_sprite=CCSprite::create;cclog;returntrue;}//按钮的响应事件voidHelloWorld::menuCloseCallback{cclog;this->m_

Cocos2d-x 3.0 数据结构

在Cocos2d-x2.x及之前的版本中,Cocos2d-x提供CCArray和CCDictionary来结合Cocos2d-x的内存管理方式一起工作,但是它们却不能很好地支持标准库中的迭代器操作,这在一定程序上影响着开发效率。以上这些操作,在同一语句中都能明确计算其对元素引用计数的影响,这样可以很好的根据Cocos2d-x的内存管理规则对容器中的元素进行自动内存管理。

【cocos2d-x 3.x 学习笔记】对象内存管理

Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

07 Cocos2d-x内存管理

引用计数的由来cocos2d-x的世界是基于CCObject类构建的,其中的每个元素:层、场景、精灵等都是一个个CCObject的对象。为什么要有自动释放池及其作用我们知道cocos2d-x使用了自动释放池,自动管理对象,知其然!我们知道对于释放池,只需要有一个就已经能够满足我们的需求了,而在cocos2d-x的设计中,使用了集合管理一堆释放池。