内存管理之三——Cocos2d-x学习历程(七)
1.容器---2.0版本
Cocos2d-x引擎为我们提供了CCArray、CCDictionary等Objective-C风格的容器。使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的内存管理。按照Cocos2d-x容器的内存管理要求,存入容器的对象必须是CCObject或其派生类。同时,Cocos2d-x的容器本身也是CCObject的派生类,当容器被释放时,它保存的所有元素都会被释放一次引用。此外,对于跨语言移植游戏(如从Objective-C移植到C++)的开发者而言,把原游戏中大量使用的容器全部替换为STL库容器是一个极富挑战性的任务。容器存在的意义不仅仅局限于内存管理方面,因此我们应该尽量采用Cocos2d-x提供的容器类。
容器---3.0版本
Cocos2d-x引擎为我们提供了Vector,Map,Value容器。
2.相关辅助宏
引用计数很巧妙也很方便,但大部分处理过程涉及指针,难免比较烦琐,也容易出错。针对这个问题,Cocos2d-x为我们准备了一系列辅助宏来简化代码,这些宏都包含在头文件"CCPlatform Macro.h"里。
3.Cocos2d-x内存管理原则
我们已经对Cocos2d-x采用的内存管理机制有了一个完整的认识。最后,我们将总结使用Cocos2d-x开发游戏时内存管理的原则:程序段必须成对执行retain()和release()或者执行autorelease()来声明开始和结束对象的引用;工厂方法返回前,应通过autorelease()结束对该对象的引用;对象传值时,应考虑到新旧对象相同的特殊情况;尽量使用release()而不是autorelease()来释放对象引用,以确保性能最优;保存CCObject的子类对象时,应严格使用Cocos2d-x提供的容器,避免使用STL容器,对象必须以指针形式存入。
如果希望自定义的类也拥有Cocos2d-x的内存管理功能,可以把CCObject作为自定义类的基类,并在实现类时严格遵守Cocos2d-x的内存管理原则。
4.生命周期分析
AppDelegate是整个程序的入口。实际上,AppDelegate处理了程序生命周期中的4个重要事件点:程序完成初始化,程序进入后台,程序重回前台和程序结束退出。进入后台和重回前台两个函数完成暂停和恢复游戏的处理。appDidFinishingLaunching则完成了加载游戏场景等工作。
内存管理之三——Cocos2d-x学习历程(七)的更多相关文章
- 内存管理之二——Cocos2d-x学习历程(六)
1.工厂方法 工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中. CCObject* factoryMethod() { CCObject* ret ...
- C语言精华——内存管理,很多学校学习不到的知识~
在编写程序时,通常并不知道需要处理的数据量,或者难以评估所需处理数据量的变动程度.在这种情况下,要达到有效的资源利用--使用内存管理,必须在运行时动态地分配所需内存,并在使用完毕后尽早释放不需要的内存 ...
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
自动释放池: @autoreleasepool { } 内存管理机制 谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...
- IOS内存管理学习笔记
内存管理作为iOS中非常重要的部分,每一个iOS开发者都应该深入了解iOS内存管理,最近在学习iOS中整理出了一些知识点,先从MRC开始说起. 1.当一个对象在创建之后它的引用计数器为1,当调用这个对 ...
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- c++内存管理学习纲要
本系列文章,主要是学习c++内存管理这一块的学习笔记. 时间:6.7-21 之下以技术内幕的开头语,带入到学习C++内存管理的技术中吧: 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题 ...
- 内存管理——Cocos2d-x学习历程(五)
Cocos2d-x采用了引用计数与自动回收的内存管理机制. 1.每个对象包含一个用来控制生命周期的引用计数器,它就是CCObject的成员变量m_u- Reference.我们可以通过retainCo ...
- 【cocos2d-x 3.x 学习笔记】对象内存管理
内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...
- iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)
iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...
随机推荐
- _itemFailedToPlayToEnd: { kind = 1; new = 2; old = 0; }
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 网络视频传输的服务质量(QoS)
QoS(Qualityof Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术.在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要QoS,比如We ...
- oracle后台进程2
oracle中的进程共分为三类:用户进程.服务进程.后台进程.其中后台进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员.他们并不会直接给用户提供服务. 一: ...
- 数据结构 B树、B-树、B+树、B*概念
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />
目录(?)[-] 1 meta http-equiv X-UA-Compatible content chrome1 1 meta http-equiv X-UA-Compatible cont ...
- CSS3 背景属性
CSS3 background-size 属性 div {background:url(bg_flower.gif);-moz-background-size:63px 100px; /* 老版本的 ...
- hive 函数学习
NAME PRICE ---- ----- AAA 1.59 AAA 2.00 AAA 0.75 BBB 3.48 BBB 2.19 BBB 0.99 BBB 2.50 I would like to ...
- DOM常见属性及用法
1:innerHTML.outerHTML.innerText.outerText innerHTML: 设置或获取位于对象起始和结束标签内的HTML. outerHTML: 设置或获取对象及其内容的 ...
- wampserver配置memcache
我用的环境是win7 64位的操作系统,wampserver也是64位,版本是2.5的,其中带的php版本是5.5的. 配置memcache的步骤: 第一步,先下载memcahed.exe和php_m ...
- lua学习笔记(2)-常用调用
assert(loadstring("math.max(7,8,9)"))dofile("scripts/xxx.lua")math.floor()math.r ...