【问题标题】:Cocos2D: What needs to be allocated?Cocos2D:需要分配什么?
【发布时间】:2012-07-02 23:18:19
【问题描述】:

我现在应该真的知道这一点,但我无法决定何时分配游戏对象何时不需要。

示例:我的游戏中有一个暂停按钮。这个按钮没有以任何方式分配,我把我的输入层是这样的: pauseButton = [CCSprite spriteWithSpriteFrameName:@"pause.png"];

我也用一些标签做到了这一点。

但是,我在教程的帮助下将我的角色对象添加到了游戏中,如下所示: [[[self alloc]initWithImage] autorelease]; (这一行是方法的一部分)

那么,如何决定是否分配游戏对象?有没有好的做法,或者我应该分配->自动释放我添加到游戏中的所有内容?

【问题讨论】:

    标签: memory-management cocos2d-iphone


    【解决方案1】:

    实际上这两行基本相同。 spriteWithSpriteFrameName 是 CCSprite 类的静态函数。它返回一个自动释放对象。

    initWithImage 是非静态的,因此您需要先分配它,但由于它也被标记为自动释放,所以它的行为方式相同。

    我的经验法则是,如果有可以返回自动释放对象的静态函数,我会为了方便而使用它们。如果从第二个示例中删除自动释放,则必须手动调用对象上的“释放”来销毁它。您不能在自动释放对象上调用释放,因此可能存在您希望尽早销毁对象(而不是例如在场景更改时)的情况。

    希望有帮助!

    【讨论】:

    • 是的,这清除了很多东西,谢谢!虽然,initWithImage 是一个包含 'initWithSpriteFrameName:@"char0.png' 的方法,这不返回自动释放对象吗?再次感谢 Arbel!
    • 对。如果它用 init 标记,它将需要被分配并且不会返回自动释放对象,除非你指定它。
    猜你喜欢
    • 2022-11-28
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2018-11-11
    相关资源
    最近更新 更多