4

我一直在寻找 cocos2d-x 的文档,但除了基础知识之外,它似乎真的很差。我知道我自己的类应该继承自CCObject能够使用(最初是可可的)retain/release机制,但我仍然对当你new做某事时会发生什么感到困惑。init不会自动调用。从构造函数内部调用它可以吗?仅此一项就可以保证我的对象将从引用计数 1 开始吗?什么是CC_SAFE_DELETE我应该在什么时候使用它?做releaseautorelease工作完全像可可?怎么样CC_SYNTHESIZE?我只需要查看一个正确编码的类示例(它是实例化/破坏)来了解我应该做什么,以免搞砸并留下内存泄漏。谢谢你。

4

2 回答 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 回答