有人可以解释一下为什么我们需要在Cocos2dx中使用CREATE_FUNC吗?我在HelloWorld样例中看到了这个,但不是很清楚。请告诉我更多细节。谢谢。
有人可以解释一下为什么我们需要在Cocos2dx中使用CREATE_FUNC吗?我在HelloWorld样例中看到了这个,但不是很清楚。请告诉我更多细节。谢谢。
/**
* define a create function for a specific type, such as CCLayer
* @__TYPE__ class type to add create(), such as CCLayer
*/
#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 = NULL;
return NULL;
}
}
它基本上为您的类型“编写”了create()
方法,并调用您的init()
实现。它的主要目的是调用autorelease()
方法,以便如果您自己编写create()
,则不会忘记它。这似乎不太重要,但它会占用你一点时间。init…
方法之一。最好从子类的构造函数或init()
中完成此操作。create()
函数时,它们只需在一个位置更新宏定义。这样留下的出错空间更少,因为几乎不可能“忘记”更新代码到新版本的地方。除了内存管理外,定义CREATE_FUNC宏的更加重要的原因是,如果没有声明它,您的init()方法将永远不会被调用。(在宏扩展中查看此代码片段=> if (pRet && pRet->init()))
因此,这实际上不仅限于内存管理。您可以尝试在init方法中放置日志并进行验证。
CREAT_FUNC(ClassName)
只是一个宏,帮助我们简化代码。
它包含默认的 ClassName *create()
和 bool init()
函数。
完成后,您应该在您的 ClassName.cpp
文件中实现 bool ClassName::init()
。
您可以展示定义的细节,然后您就会发现。希望这能帮到您。