Cocos2d iphone 对精灵数组的访问不正确
我正在用ccsprite填充NSMutableArray,并将它们添加到添加到场景的当前层。当我试图访问数组的元素时,我得到了一个错误的访问错误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
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 ];
}