适当的实例化和cocos2d-x中的内存管理

时间:2012-05-22 20:18:26

标签: c++ cocoa memory-management instantiation cocos2d-x

我一直在寻找cocos2d-x的文档,但除了基础知识外,它似乎真的非常糟糕。我知道我自己的类应该继承CCObject以便能够使用(最初可可的)retain / release机制,但我仍然对你{{1}时会发生什么感到困惑某事。 new不会自动调用。可以从构造函数中调用它吗?是否仅保证我的对象将以引用计数1开始?什么是init我应该何时使用它? CC_SAFE_DELETErelease的工作方式与可可完全相同吗?怎么样autorelease?我只需要看一个正确编码的类示例(以及它的实例化/破坏)来理解我应该做什么,以免螺丝和留下内存泄漏。 谢谢。

2 个答案:

答案 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

享受编码!