Cocos2d-x之 CCObject
来源:互联网 发布:武汉富士康2018java 编辑:程序博客网 时间:2024/05/21 07:55
<1>class CCObject;/** * @js NA * @lua NA */class CC_DLL CCZone{public: CCZone(CCObject *pObject = NULL);public: CCObject *m_pCopyObject;};构造函数实现:CCZone::CCZone(CCObject *pObject){ m_pCopyObject = pObject;}<2>class CC_DLL CCCopying{public: virtual CCObject* copyWithZone(CCZone* pZone);};在CCCopying的子类CCObject中实现了虚函数copyWithZone,很有意思:CCObject* CCCopying::copyWithZone(CCZone *pZone){ CC_UNUSED_PARAM(pZone); CCAssert(0, "not implement"); return 0;}宏定义如下:#define CC_UNUSED_PARAM(unusedparam) (void)unusedparam总结:该函数copyWithZone并不是纯虚函数.<3>class CC_DLL CCObject : public CCCopying{public: // object id, CCScriptSupport need public m_uID unsigned int m_uID; // Lua reference id int m_nLuaID;protected: // count of references unsigned int m_uReference; // count of autorelease unsigned int m_uAutoReleaseCount;public: CCObject(void); /** * @lua NA */ virtual ~CCObject(void); void release(void); void retain(void); CCObject* autorelease(void); CCObject* copy(void); bool isSingleReference(void) const; unsigned int retainCount(void) const; virtual bool isEqual(const CCObject* pObject); virtual void acceptVisitor(CCDataVisitor &visitor); virtual void update(float dt) {CC_UNUSED_PARAM(dt);}; friend class CCAutoreleasePool;};typedef void (CCObject::*SEL_SCHEDULE)(float);typedef void (CCObject::*SEL_CallFunc)();typedef void (CCObject::*SEL_CallFuncN)(CCNode*);typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);typedef void (CCObject::*SEL_CallFuncO)(CCObject*);typedef void (CCObject::*SEL_MenuHandler)(CCObject*);typedef void (CCObject::*SEL_EventHandler)(CCEvent*);typedef int (CCObject::*SEL_Compare)(CCObject*);#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)#define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)#define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)// end of base_nodes group/// @}NS_CC_END#endif // __CCOBJECT_H__总结:CCCopying和CCObject一块声明在CCObject中. 看源码可见,一旦继承了CCObject,那么这个类就有了引用计数的功能.看CCObject的构造函数:CCObject::CCObject(void): m_nLuaID(0), m_uReference(1) // when the object is created, the reference count of it is 1, m_uAutoReleaseCount(0){ static unsigned int uObjectCount = 0; m_uID = ++uObjectCount;}也就是说,不管是怎么创造出来的一个类的实例对象,这个对象的引用计数初始值都是1,再看copy函数,它只是一个普普通通的成员函数,它的里面调用了copyWithZone(0),一旦执行这个函数,那么就会提示其子类的copy函数没实现这一提示信息.一旦子类实现了,那么会覆盖掉父类的copy函数.CCObject* CCObject::copy(){ return copyWithZone(0);}
0 0
- Cocos2d-x之 CCObject
- Cocos2d-x基础:CCObject
- Cocos2d-x 的CCObject与autorelease 之深入分析
- Cocos2d-x 的CCObject与autorelease 之深入分析
- Cocos2d-x 的CCObject与autorelease 之深入分析
- Cocos2d-x 的CCObject与autorelease 之深入分析
- Cocos2d-x 的CCObject与autorelease 之深入分析(转载)
- Cocos2d-x 的CCObject与autorelease 之深入分析
- 【玩转cocos2d-x之十九】从CCObject看cocos2d-x的拷贝机制
- 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制
- 【玩转cocos2d-x之十九】从CCObject看cocos2d-x的拷贝机制
- 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制
- cocos2d-x节点(CCObject.h)API
- 多继承引发的诡异bug (cocos2d-x CCObject)
- 从CCObject看cocos2d-x的内存管理机制
- 从CCObject看cocos2d-x的内存管理机制
- cocos2d-x的内存管理和CCObject类
- 多继承引发的诡异bug (cocos2d-x CCObject)
- iOS 之UIGraphicsBeginImageContext系列知识
- 设计符合人需求层次模型的商业模式——揭密冰桶挑战背后,不为人知的商业秘密!
- PushbackInputStream简介及用法
- UML建模之时序图(Sequence Diagram)
- CentOS---网络配置详解
- Cocos2d-x之 CCObject
- __cdecl __stdcall区别
- UVA 11853 - Paintball(dfs)
- 乐元素面试
- Oracle -- Coalesce
- C++ 类非静态成员函数作为线程入口函数实现
- ZOJ Problem Set - 2027
- dbca建库不识别ASM存储
- c++类模板实例化验证