NODE_FUNC ( __TYPE__ )
CREATE_FUNC ( __TYPE__ )
我们经常在头文件中用到上面两个宏。一个重写node()方法,另一个重写create()方法.
NODE_FUNC ( __TYPE__ )代码如下:
CC_DEPRECATED_ATTRIBUTEstatic__TYPE__* node() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
CREATE_FUNC ( __TYPE__ )代码如下:
static__TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
注释中写的很明确,为一个类似CCLayer类的特定的类增加一个create函数.我们也可以看到在宏的下面定义了一个create()函数返回的类型就是宏带入的参数__TYPE__指针类型.那create函数里做了什么呢?它执行了类的构造函数,执行了init()初始化函数,最后又设置创建出的对象为自动释放内存.这样其他人在使用这个类的时候,只要是用create()函数创建出来的对象就不用费心去管理释放内存了.这个宏是不是很好用?
从代码可以看出重写的作用:
实现二阶段构造:
即先调用构造函数(CCLayer类node方法中调用构造函数),再调用init方法进行初始化(子类中先调用父类的init方法)。
设置其自动释放内存,方便内存管理,不需要手动去释放
转载自:http://blog.csdn.net/we000636/article/details/8247042