【玩转cocos2d-x之十九】从CCObject看cocos2d-x的拷贝机制
原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/13295505
CCObject在之前的文章中出現了N次,它扮演了一個老祖宗的角色,但是它到底是做什么的?先從它看看cocos2d-x的拷貝機制吧。
1.CCCopying
CCObject從CCCopying繼承而來,而CCCopying擁有唯一的一個成員虛函數copyWithZone,這個函數可以認為是拷貝的一個協議,所有繼承了CCObject并且需要實現拷貝功能的子類都可以通過它來實現,它的源碼很簡單,就是一個未實現的斷言。CCZone是神馬?只是封裝了一個CCObject對象指針而已。
[cpp]?view plaincopy
2.CCObject的子類拷貝問題
再看看CCObject中copy的實現,是的,直接調用了copyWithZone,所以子類在處理拷貝問題時只需要對copyWithZone進行實現,使用時調用copy即可。
[cpp]?view plaincopy
3.CCArray示例
這里以CCArray的拷貝為例,CCArray繼承于CCObject,如上所說,我們只需要實現copyWithZone,然后在拷貝時調用copy即可實現CCArray的拷貝。
3.1.CCArray拷貝時調用copy
[cpp]?view plaincopy
3.2.copyWithZone的實現
可以看出CCArray采用的是深拷貝的方式。
[cpp]?view plaincopy
4.深拷貝和淺拷貝
其實不單是CCArray,cocos2d-x采用的都是深拷貝的方式,深拷貝和淺拷貝的概念和詳解請移步http://blog.csdn.net/jackystudio/article/details/11553117。它們的區別在于當前對象是否包含了對其他資源的引用。在拷貝機制上采用深拷貝的方式,大大方便了我們對內存的管理,避免因資源的釋放導致引用異常。這對于平時在進行一些自定義子類的拷貝處理上還是很有指導意義的。
總結
以上是生活随笔為你收集整理的【玩转cocos2d-x之十九】从CCObject看cocos2d-x的拷贝机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【玩转cocos2d-x之十五】关卡选择
- 下一篇: 【玩转cocos2d-x之二十六】数据结