僵尸由 [数组计数] 发送消息

发布于 2024-09-26 22:32:41 字数 365 浏览 1 评论 0原文

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

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

然后在稍后的方法中,点击按钮,我执行以下操作,但该数组似乎过度释放...并显示 Zombie 消息:

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

我该如何解决此问题?

谢谢。

I have an ivar mutable array which i setup in viewDidLoad as follows:

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

Then in a later method, on tap of a button, i do the following, but the array appears to be overreleasing... with Zombie messaged:

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

How do i fix this?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谜泪 2024-10-03 22:32:41

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

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

(或者,

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

不要忘记在 -dealloc 中释放它。

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

+arrayWithCapacity: will return an auto-released object, i.e. in the "later method" this object is likely already deallocated. You need to retain this object to make it available "later".

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

(alternatively,

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

)

Don't forget to release it in -dealloc.

-(void)dealloc {
   [names release];
   ...
   [super dealloc];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文