从CCObject看Cocos2d-x的拷贝机制
2015-08-19 13:34
288 查看
http://cn.cocos2d-x.org/tutorial/show?id=560
CCObject在之前的文章中出现了N次,它扮演了一个老祖宗的角色,但是它到底是做什么的?先从它看看Cocos2d-x的拷贝机制吧。
CCObject从CCCopying继承而来,而CCCopying拥有唯一的一个成员虚函数copyWithZone,这个函数可以认为是拷贝的一个协议,所有继承了CCObject并且需要实现拷贝功能的子类都可以通过它来实现,它的源码很简单,就是一个未实现的断言。CCZone是神马?只是封装了一个CCObject对象指针而已。
再看看CCObject中copy的实现,是的,直接调用了copyWithZone,所以子类在处理拷贝问题时只需要对copyWithZone进行实现,使用时调用copy即可。
这里以CCArray的拷贝为例,CCArray继承于CCObject,如上所说,我们只需要实现copyWithZone,然后在拷贝时调用copy即可实现CCArray的拷贝。
可以看出CCArray采用的是深拷贝的方式。
其实不单是CCArray,Cocos2d-x采用的都是深拷贝的方式,深拷贝和浅拷贝的概念和详解请移步/article/1340667.html。它们的区别在于当前对象是否包含了对其他资源的引用。在拷贝机制上采用深拷贝的方式,大大方便了我们对内存的管理,避免因资源的释放导致引用异常。这对于平时在进行一些自定义子类的拷贝处理上还是很有指导意义的。
CCObject在之前的文章中出现了N次,它扮演了一个老祖宗的角色,但是它到底是做什么的?先从它看看Cocos2d-x的拷贝机制吧。
1.CCCopying
CCObject从CCCopying继承而来,而CCCopying拥有唯一的一个成员虚函数copyWithZone,这个函数可以认为是拷贝的一个协议,所有继承了CCObject并且需要实现拷贝功能的子类都可以通过它来实现,它的源码很简单,就是一个未实现的断言。CCZone是神马?只是封装了一个CCObject对象指针而已。
2.CCObject的子类拷贝问题
再看看CCObject中copy的实现,是的,直接调用了copyWithZone,所以子类在处理拷贝问题时只需要对copyWithZone进行实现,使用时调用copy即可。
3.CCArray示例
这里以CCArray的拷贝为例,CCArray继承于CCObject,如上所说,我们只需要实现copyWithZone,然后在拷贝时调用copy即可实现CCArray的拷贝。
3.1.CCArray拷贝时调用copy
3.2.copyWithZone的实现
可以看出CCArray采用的是深拷贝的方式。
4.深拷贝和浅拷贝
其实不单是CCArray,Cocos2d-x采用的都是深拷贝的方式,深拷贝和浅拷贝的概念和详解请移步/article/1340667.html。它们的区别在于当前对象是否包含了对其他资源的引用。在拷贝机制上采用深拷贝的方式,大大方便了我们对内存的管理,避免因资源的释放导致引用异常。这对于平时在进行一些自定义子类的拷贝处理上还是很有指导意义的。
相关文章推荐
- Cocos从入门到精通--《Cocos引擎在mac平台上的搭建》
- 1.cocos2dx它Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第四节:3D公告板
- cocos2d-x3.2 在Windows下打包Android平台APK
- 小小菜之Cocos2d-x游戏开发旅程——常用Action(1)
- Cocos2D游戏之旅(五):三种方法实现技能动画
- Cocos2d-x 3.x 编译Android方法
- cocos2d-x 3.6运行cocos run出现Ndk build failed解决办法
- cocos2d-x开发日志10 ——贪食蛇源码
- cocos2d-x开发日志09 —— Vector
- cocos2d-x开发日志08 —— 绘图工具
- 【Cocos2dx】Windows平台下Cocos2dx 2.x的下载、安装、配置,打造自己的Helloworld
- cocos-2dx 渲染(2)
- cocos2dx android mac
- Cocos2d-x之简单数据存储 — Userdefault
- Cocos2d-x3.2 UserDefault用户数据
- cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。
- Cocos2d-x 屏幕适配新解
- cocos2d-x 屏幕分辨率适配方法
- COCOS2D-X 多分辨率适配完全解析