删除视图时EXC_BAD_ACCESS

时间:2011-03-25 15:00:34

标签: objective-c uiview exc-bad-access

我的EXC_BAD_ACCESS存在问题。

我有一个加载本地HTML文件的UIWebView,当应用程序正在加载视图的内容时,我在它上面显示一个UIView作为“启动画面”。然后当加载UIWebView的内容时,我运行一个动画来淡出UIView并将其从内存中删除。

- (void) webViewDidFinishLoad:(UIWebView *)webView {
        [UIView animateWithDuration:1
                 animations:^{
                      loadingView.alpha = 0.0;
                 }
                 completion:^(BOOL finished){
                     [loadingView removeFromSuperview];
                     [loadingView release];
                 }];
}

问题是,当我使用我的应用程序时,在完成方法中的两行上失败。完整错误:

Program received signal:  “EXC_BAD_ACCESS”.
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3 (8F190)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).

loadingView是通过界面构建​​器构建的。这是heirarchy:

Image

2 个答案:

答案 0 :(得分:1)

看起来你要两次发布视图。

您的超级视图将保留对您的启动图像的引用。这将在您removeFromSuperview时发布。

如果这是对splash图像的唯一引用,则下一行(即发行版)将 over -release并导致崩溃。根据您提供的代码判断,解决方案是删除显式版本。

但是,如果代码多于你所展示的代码,那么它可能会更复杂一些,但同样的想法。

答案 1 :(得分:0)

如果您之前没有保留loadingView,则可能会导致异常。

如果您不保留(例如使用保留属性),则不允许您释放视图。

但为了避免泄密,你应该仔细检查是否可以简单地删除[loadingView release]