cocos2d-x 中正确的实例化和内存管理
-
13-12-2019 - |
题
我一直在寻找 cocos2d-x 的文档,但除了基础知识之外,它似乎真的很差。我明白我自己的类应该继承自 CCObject
能够使用(最初是可可的) retain
/release
机制,但我仍然对当你发生什么感到困惑 new
某物。 init
不会自动调用。从构造函数内部调用它可以吗?仅凭这一点就能保证我的对象将以引用计数 1 开始吗?什么是 CC_SAFE_DELETE
我应该什么时候使用它?做 release
和 autorelease
和可可一样工作吗?关于什么 CC_SYNTHESIZE
?我只需要看一个 正确编码 类示例(及其实例化/销毁)来理解我应该做什么,以免搞砸并留下内存泄漏。谢谢。
解决方案
如果你查看 CCObject 类的代码,你会发现在它的构造函数中引用计数被设置为 1。因此,对象创建与 new
是正确的。Init 未被调用,因为 CCObject 类没有这样的方法。通常我更喜欢使用静态构造函数创建对象。有点像
MyClass* MyClass::createInstance()
{
MyClass* object = new MyClass();
// you can create virtual init method
// and call it here
if( initWasSuccessful )
{
object->autorelease();
}
else
{
CC_SAFE_RELEASE_NULL(object);
}
return object;
}
关于CC_SAFE_DELETE等所有宏 - 您可以在cocos2dx的代码中找到它们。这个宏只是检查对象是否为 NULL,以防止尝试调用释放方法时崩溃。
其他提示
Morion 提供的答案很棒,我只想添加一些关于此事的有用链接。
这里可以找到Cocos2d-x官方的内存管理页面:Cocos2d-x 中的内存管理
此论坛页面还包含一些更多详细信息和说明:Cocos2d-x 中的内存释放
享受编码的乐趣!
不隶属于 StackOverflow