家伙!抱歉我的语言不好。 当我使用我在不同方法InitCats中创建的数组时,我的应用程序在Update方法中崩溃。我在@interface {}的头文件中创建了NSMutableArray * Cats和CCSprite * CA.
-(id)init
{
[self InitCats];
[self schedule:@selector(update:) interval:0.0f];
}
-(void)InitCats // This method is work well in -(id)init
{
Cats = [NSMutableArray arrayWithCapacity:NumCats];
for (int a=0; a<NumCats; a++)
{
CCSprite* Cat=[CCSprite spriteWithFile:@"1.png"];
[Cats addObject:Cat];
}
}
-(void) update:(ccTime)delta
{
for (int a=0; a<NumCats; a++)
{
CA = [Cats objectAtIndex:a]; //In this place I have ERROR, app crashes
CA.position = CGPointMake(CA.position.x-1, CA.position.y);
}
}
答案 0 :(得分:0)
我猜你指的是释放的物体。尝试初始化你的数组
Cats = [[NSMutableArray alloc] initWithCapacity:NumCats];
和dealloc
-(void)dealloc
{
[Cats release];
[super dealloc];
}
答案 1 :(得分:0)
好的,问题是这句话:
Cats = [NSMutableArray arrayWithCapacity:NumCats];
这将创建一个自动释放的对象,但是在自动释放后,指向此对象的指针将为非nil
,因此您的代码将引用一个已解除分配的对象。
您已经有了修复:
Cats = [[NSMutableArray alloc] initWithCapacity:NumCats];
和从arrayWithCapacity
方法中移除InitCats
来电。
(请注意,方法和实例变量名称的大写是非常规的。)