在这里过度释放?

mac*_*_55 3 memory-management objective-c

对于我的应用程序,我在某些设备上获得了EXC_BAD_ACCESS的临时测试版,请参阅此处: 帮助调试iPhone应用程序 - EXC_BAD_ACCESS

我已设法在终端中使用atos -arch armv6 -o myapp.app/myapp 0x000037a6来追踪导致此问题的方法,并引导我进入这段代码:

for (UIView *view in scrollView.subviews) {
    [view removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)

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

我的问题是,我怎样才能使这个安全,所以它只有在尚未发布的情况下才会发布?

ben*_*ado 6

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

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

你应该没事