在这里过度释放?

时间:2010-01-08 00:11:58

标签: objective-c memory-management

我在app中的某些设备上获得了EXC_BAD_ACCESS我的应用程序,请参阅此处: Help debugging iPhone app - EXC_BAD_ACCESS

我设法使用atos -arch armv6 -o myapp.app/myapp 0x000037a6  在终端中追踪导致这个问题的方法,它引导我到这段代码:

for (UIView *view in scrollView.subviews) {
    [view removeFromSuperview];
}

我怀疑应用程序正在接收内存访问警告,并释放它是孩子们的scrollview或UIImageViews,所以当我使用上面的方法时,它会遇到错误(和崩溃),因为它会过度释放视图。

我的问题是,我怎样才能使这个安全,以便它只在尚未发布时才会发布?

1 个答案:

答案 0 :(得分:6)

您在迭代时修改数组。它很微妙,但因为removeFromSuperview将其从子视图列表中删除,所以您正在更改数组。将您的代码更改为此,

NSArray *subviews = [scrollView.subviews copy];
for (UIView *view in subviews) {
    [view removeFromSuperview];
}
[subviews release];

你应该没事。