【问题标题】:Zombie messaged by [array count][array count] 发送的僵尸消息
【发布时间】:2010-10-09 16:35:45
【问题描述】:

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

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

然后在稍后的方法中,点击一个按钮,我执行以下操作,但数组似乎过度释放...僵尸消息:

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

我该如何解决这个问题?

谢谢。

【问题讨论】:

    标签: objective-c ios4 nsmutablearray nszombie


    【解决方案1】:

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

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

    (或者,

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

    )

    别忘了在-dealloc发布它。

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

    【讨论】:

    • 假设 names 是一个 iVar 并且有一个相应的 setter 或 @propertyself.names = [NSMutableArray array]; 也可以工作。
    猜你喜欢
    • 2012-03-19
    • 2011-04-15
    • 2013-12-02
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多