我一直在寻找 cocos2d-x 的文档,但除了基础知识之外,它似乎真的很差。我知道我自己的类应该继承自CCObject
能够使用(最初是可可的)retain
/release
机制,但我仍然对当你new
做某事时会发生什么感到困惑。init
不会自动调用。从构造函数内部调用它可以吗?仅此一项就可以保证我的对象将从引用计数 1 开始吗?什么是CC_SAFE_DELETE
我应该在什么时候使用它?做release
和autorelease
工作完全像可可?怎么样CC_SYNTHESIZE
?我只需要查看一个正确编码的类示例(它是实例化/破坏)来了解我应该做什么,以免搞砸并留下内存泄漏。谢谢你。
问问题
3276 次
2 回答
4
如果您查看 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 以防止尝试调用 release 方法时崩溃。
于 2012-05-24T05:43:35.203 回答
1
Morion 提供的答案很好,我只想添加一些关于这个问题的有用链接。
在这里你可以找到Cocos2d-x官方的内存管理页面: Cocos2d-x中的内存管理
这个论坛页面还包含一些更多的细节和澄清: Cocos2d-x 中的内存释放
享受编码!
于 2012-11-19T13:44:50.923 回答