僵尸消息[数组计数]

时间:2010-10-09 16:35:46

标签: objective-c ios4 nsmutablearray nszombie

我有一个ivar可变数组,我在viewDidLoad中设置如下:

names = [NSMutableArray arrayWithCapacity:30];
[names addObject:@"Joe"];
[names addObject:@"Dom"];
[names addObject:@"Bob"];

然后在稍后的方法中,点击一个按钮,我执行以下操作,但是阵列似乎是过度释放...使用Zombie消息:

int r = arc4random() % [names count];
NSLog(@"%d", r);

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:5)

+arrayWithCapacity:将返回一个自动释放的对象,即在“后一种方法”中,该对象可能已经被释放。您需要保留此对象以使其“稍后”可用。

names = [[NSMutableArray arrayWithCapacity:30] retain];

(可选地,

names = [[NSMutableArray alloc] initWithCapacity:30];

不要忘记在-dealloc中发布它。

-(void)dealloc {
   [names release];
   ...
   [super dealloc];
}