我有一个ivar可变数组,我在viewDidLoad中设置如下:
names = [NSMutableArray arrayWithCapacity:30];
[names addObject:@"Joe"];
[names addObject:@"Dom"];
[names addObject:@"Bob"];
然后在稍后的方法中,点击一个按钮,我执行以下操作,但是阵列似乎是过度释放...使用Zombie消息:
int r = arc4random() % [names count];
NSLog(@"%d", r);
我该如何解决这个问题?
感谢。
答案 0 :(得分:5)
+arrayWithCapacity:
将返回一个自动释放的对象,即在“后一种方法”中,该对象可能已经被释放。您需要保留此对象以使其“稍后”可用。
names = [[NSMutableArray arrayWithCapacity:30] retain];
(可选地,
names = [[NSMutableArray alloc] initWithCapacity:30];
)
不要忘记在-dealloc
中发布它。
-(void)dealloc {
[names release];
...
[super dealloc];
}