Cocos2d 在创建对象时需要调用create函数,该函数具体内容如下:
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new(std::nothrow) __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = nullptr; \
return nullptr; \
} \
}
可以看到在create()函数中,先new了一个对象,然后判断了创建该对象和初始化(init())是否成功,两个都成功后,将对象调用autorelease()函数,也就是网上都在说的“自动释放池”。
create()函数中的自动释放功能非常的好用,可以省掉很多的麻烦,经过本人测试,如果不使用autorelease而自己delete的话,有时候会出现一些无法解释的bug(比如内存泄露(这个可以解释= =...),add/removeChild 无效, 对象内创建新对象错误/无效 等等)。但是,从函数中可以看到,create()和init()是绑在一起的,这就使得有时候操作起来很难受。如果单独再次调用init函数的话