cocos2d-x节点(CCObject.h)API
2013-12-06 20:52
330 查看
本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
对象引用计数器的使用和比较
cocos2d-x节点(CCObject.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记对象引用计数器的使用和比较
///\cocos2d-x-3.0alpha0\cocos2dx\cocoa //对象引用计数器的使用和比较 #ifndef __CCOBJECT_H__ #define __CCOBJECT_H__ #include "cocoa/CCDataVisitor.h" #include "ccMacros.h" #ifdef EMSCRIPTEN #include <GLES2/gl2.h> #endif // EMSCRIPTEN NS_CC_BEGIN /** * @addtogroup base_nodes * @{ */ class Object; class Node; /** 定义如何克隆一个对象的接口 */ class CC_DLL Clonable { public: /** 返回对象的副本 */ virtual Clonable* clone() const = 0; /** * @js NA * @lua NA */ virtual ~Clonable() {}; /** 返回对象的副本 . @过时不再需要建议使用新的 API。使用 clone() 代替 */ CC_DEPRECATED_ATTRIBUTE Object* copy() const { // 使用 "clone" 代替 CC_ASSERT(false); return nullptr; } }; class CC_DLL Object { public: /// 对象的 id, ScriptSupport 需要一个 public _ID unsigned int _ID; /// Lua 饮用 id int _luaID; protected: /// 引用计数 unsigned int _reference; /// 统计 autorelease 数量 unsigned int _autoReleaseCount; public: /** * Constructor * *创建后对象的引用计数为1 * @js NA */ Object(); /** * @js NA * @lua NA */ virtual ~Object(); /** * 立即释放所有权. * * 这个对象的引用计数减1 * * 如果引用计数器减少到 0 后这个对象就不存在了 * * @see retain, autorelease * @js NA */ inline void release() { CCASSERT(_reference > 0, "reference count should greater than 0"); --_reference; if (_reference == 0) delete this; } /** * 保持所有权 * *这增加了该对象的引用计数。 * * @see release, autorelease * @js NA */ inline void retain() { CCASSERT(_reference > 0, "reference count should greater than 0"); ++_reference; } /** * 不久的某个时候自动释放所有权. * * 在当前自动释放池里,减少这个对象的引用计数 * * 如果引用计数器减少到 0 后这个对象就不存在了 * * @returns 这个对象自己. * * @see AutoreleasePool, retain, release * @js NA * @lua NA */ Object* autorelease(); /** * Returns 一个 boolean 值,表示这个对象是否只被饮用了一次 *也就是说,这个对象的引用计数器是否是 1. * * @returns 这个对象的引用计数器是否是 1. * @js NA */ bool isSingleReference() const; /** * Returns 这个对象的引用计数. * * @returns 这个对象的引用计数. * @js NA */ unsigned int retainCount() const; /** * Returns 一个 boolean 值,表示这个对象是否和给定对象相等. * * @param object 需要比较的对象. * * @returns True 如果这个对象和 @p 对象 equal, otherwise false. * @js NA * @lua NA */ virtual bool isEqual(const Object* object); /** * @js NA * @lua NA */ virtual void acceptVisitor(DataVisitor &visitor); /** * @js NA * @lua NA */ virtual void update(float dt) {CC_UNUSED_PARAM(dt);}; friend class AutoreleasePool; }; typedef void (Object::*SEL_SCHEDULE)(float); typedef void (Object::*SEL_CallFunc)(); typedef void (Object::*SEL_CallFuncN)(Node*); typedef void (Object::*SEL_CallFuncND)(Node*, void*); typedef void (Object::*SEL_CallFuncO)(Object*); typedef void (Object::*SEL_MenuHandler)(Object*); typedef int (Object::*SEL_Compare)(Object*); #define schedule_selector(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR) #define callfunc_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFunc>(&_SELECTOR) #define callfuncN_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncN>(&_SELECTOR) #define callfuncND_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncND>(&_SELECTOR) #define callfuncO_selector(_SELECTOR) static_cast<cocos2d::SEL_CallFuncO>(&_SELECTOR) #define menu_selector(_SELECTOR) static_cast<cocos2d::SEL_MenuHandler>(&_SELECTOR) #define event_selector(_SELECTOR) static_cast<cocos2d::SEL_EventHandler>(&_SELECTOR) #define compare_selector(_SELECTOR) static_cast<cocos2d::SEL_Compare>(&_SELECTOR) // 新的 callbacks 基于 C++11 #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__) #define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__) #define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__) // end of base_nodes group /// @} NS_CC_END #endif // __CCOBJECT_H__
相关文章推荐
- cocos2d-X 节点(CCActionObject.h)API
- cocos2d-X 节点(CCMotionStreak.h)API
- cocos2d-X 节点(CCActionNode.h)API
- cocos2d-x节点(CCEventAcceleration.h)API
- cocos2d-x节点(CCDeprecated.h)API
- cocos2d-x节点(CCActionProgressTimer.h)API
- cocos2d-x节点(CCActionTiledGrid.h)API
- cocos2d-x节点(CCTransitionProgress.h)API
- cocos2d-x节点(CCActionTween.h)API
- cocos2d-X 节点(CCMenuItem.h)API
- cocos2d-x节点(CCVertex.h)API
- cocos2d-x节点(CCTransitionPageTurn.h)API
- cocos2d-x节点(CCClippingNode.h)API
- cocos2d-x节点(CCEventType.h)API
- cocos2d-x节点(CCApplicationProtocol.h)API
- cocos2d-x节点(ccConfig.h)API
- cocos2d-x节点(CCCommon.h)API
- cocos2d-x节点(CCParticleExamples.h)API
- cocos2d-x节点(CCInteger.h)API
- cocos2d-x节点(CCGLProgram.h)API