Cocos2d iphone 对精灵数组的访问不正确

Cocos2d iphone 对精灵数组的访问不正确,cocos2d-iphone,nsmutablearray,exc-bad-access,Cocos2d Iphone,Nsmutablearray,Exc Bad Access,我正在用ccsprite填充NSMutableArray,并将它们添加到添加到场景的当前层。当我试图访问数组的元素时,我得到了一个错误的访问错误 sprites = [[[NSMutableArray alloc] init]autorelease]; int j = 0; for (int i=0; i<[sprites count]; i++) { j=i+1; sprite = [CCSprite spriteWithFil

我正在用ccsprite填充NSMutableArray,并将它们添加到添加到场景的当前层。当我试图访问数组的元素时,我得到了一个错误的访问错误

sprites = [[[NSMutableArray alloc] init]autorelease];

    int j = 0;

    for (int i=0; i<[sprites count]; i++)
    {
        j=i+1;
        sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"intro%d.png",j]];
        sprite.position = ccp(WIDTH/2, HEIGHT/2+(i*HEIGHT));
        [sprites addObject:sprite];

    }

    for (int i = 0; i<[sprites count]; i++)
    {
        [self addChild:[sprites objectAtIndex:i]];
    }


    [self scheduleUpdate];


}
return self;

当控制权传递给update方法时,我得到了一个错误的访问。如果有人能帮助我,我将非常高兴

您应该保留精灵阵列(确保在对象的dealoc中释放它)。因为它是自动释放的,所以在从init到update方法的周期中,它会被释放


另外(奇怪的是),如果代码如图所示,则在开始第一个循环时,sprites.count为0。你不会在那里得到太多:)。

发生这种情况是因为你创建了一个自动释放对象,然后在更新代码中尝试访问它。sprites数组的retain计数为零(因为它是自动释放的),当它被解除分配时,您尝试访问它,并得到一个错误的访问错误

若要修复此问题,不应使精灵数组成为自动释放对象。由于您计划稍后在代码中使用该对象,因此应该保留它(通过不添加自动释放)。然后还应确保在(无论在数组上操作的父对象是什么)的dealloc方法中释放该数组

- ( void ) dealloc {
   [ sprites release ];
   [ super dealloc ];
}
其他人是对的(罪魁祸首是
autorelease
调用-您应该删除它,然后在场景的
dealloc
方法中释放数组)


另外请注意,
[[[NSMutableArray alloc]init]autorelease]
[NSMutableArray]
具有相同的效果(不过,对于您的场景,这不是您需要的)。

非常感谢您的回答非常有用。我很感激。
- ( void ) dealloc {
   [ sprites release ];
   [ super dealloc ];
}