我一直在寻找 cocos2d-x 的文档,但除了基础知识之外,它似乎真的很差。我明白我自己的类应该继承自 CCObject 能够使用(最初是可可的) retain/release 机制,但我仍然对当你发生什么感到困惑 new 某物。 init 不会自动调用。从构造函数内部调用它可以吗?仅凭这一点就能保证我的对象将以引用计数 1 开始吗?什么是 CC_SAFE_DELETE 我应该什么时候使用它?做 releaseautorelease 和可可一样工作吗?关于什么 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 中的内存释放

享受编码的乐趣!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top