【问题标题】:Cocos2D - NSMutableArray of CCSpritesCocos2D - CCSprites 的 NSMutableArray
【发布时间】:2010-06-03 22:47:54
【问题描述】:

我尝试在 NSMutableArray 中存储一些 CCSprite,但游戏立即崩溃,我猜是内存问题,我也猜 CCSprite 是自动释放对象?

那么,如何在 NSMutableArray 中存储多个 CCSprite?

我想这样做的目的是将所有敌人存储在一个数组中,然后在我的时间步函数中循环遍历它们并更新它们的位置等等。

我想做什么:

NSMutableArray *enemies = [NSMutableArray array];
[enemies addObject: [CCSprite spriteWithFile: @"hello.png"]];

当我尝试使用 -objectAtIndex 到达精灵时它崩溃了:

【问题讨论】:

  • 发布一些显示问题的示例代码。此外,没有“自动释放对象”之类的东西。对象是否自动释放取决于使用它的代码。
  • 从哪里访问阵列?它是否存储在 ivar 中?它会保留在某个地方吗?
  • Georg:我使用了@property (nonatomic, retain) NSMutableArray *enemies;

标签: iphone objective-c cocos2d-iphone


【解决方案1】:

数组是自动释放的。如果您稍后尝试在另一个上下文中访问它,它可能已经死了。所以你要么保留它,要么不使用便捷数组方法,而是显式使用[[NSMutableArray alloc] init]

或将其存储在保留属性中(在这种情况下请务必使用 setter 方法,即self.ivar = enemies;

无论您采用哪种方式,请注意不要“过度保留”您的数组,即使用 alloc/init 和保留设置器,否则您的数组将永远不会再次被释放(更准确地说,它只会在“buggy”时被释放" 双重释放)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多