在我的应用程序的特别测试版中,我在某些设备上获得了exc_bad_访问权限,请参见此处:
Help debugging iPhone app - EXC_BAD_ACCESS
我已经成功地使用了atos-arch armv6-o myapp.app/myapp 0x000037a6
在终端中跟踪导致这个问题的方法,它会引导我找到这段代码:

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

我怀疑应用程序正在接收内存访问警告,并释放它的孩子的ScLoVIEW或UIIVIEVIEW,所以当我使用上面的方法时,它会出现错误(和崩溃),因为它正在过度释放视图。
我的问题是,我怎样才能保证它的安全,只有在它还没有发布的时候才发布?

最佳答案

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

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

你应该没事的。

关于objective-c - 放宽这里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2024654/

10-10 23:09