我一直在寻找cocos2d-x的文档,但除了基础知识外,它似乎真的非常糟糕。我知道我自己的类应该继承CCObject
以便能够使用(最初可可的)retain
/ release
机制,但我仍然对你{{1}时会发生什么感到困惑某事。 new
不会自动调用。可以从构造函数中调用它吗?是否仅保证我的对象将以引用计数1开始?什么是init
我应该何时使用它? CC_SAFE_DELETE
和release
的工作方式与可可完全相同吗?怎么样autorelease
?我只需要看一个正确编码的类示例(以及它的实例化/破坏)来理解我应该做什么,以免螺丝和留下内存泄漏。
谢谢。
答案 0 :(得分:4)
如果您将查看CCObject类的代码,您将看到它的构造函数引用计数在那里设置为1。因此,使用new
创建对象是正确的。不调用Init,因为CCObject类没有这样的方法。通常我更喜欢使用静态构造函数创建对象。像Smth一样
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方法时崩溃。
答案 1 :(得分:1)
Morion提供的答案很棒,我只想添加一些关于此事的有用链接。
在这里您可以找到Cocos2d-x页面中的官方内存管理: Memory Management in Cocos2d-x
此论坛页面还包含更多详细信息和说明: Memory deallocation in Cocos2d-x
享受编码!