0

我的 UIViewController 在委托回调的中间被释放。这是发生的事情:

  1. UIWebView开始加载
  2. 用户按下取消
  3. UIWebView开始滑出
  4. 请求完成,调用didFinish处理程序
  5. 在处理程序的中间didFinish(就像在两行代码之间)视图控制器运行 dealloc
  6. 一切都被解除分配,委托被清除,网络请求停止
  7. 处理程序以解除分配状态恢复,导致 BAD_ACCESS 异常

我已经检查过 - 一切都在主线程上运行。

如何确保在处理程序中间不调用 dealloc?

附带问题 - 这对所有代表来说都不是问题吗?这让我很害怕。

4

2 回答 2

0

如何确保在处理程序中间不调用 dealloc?

不要在回调中间释放它。我猜你正在设置self.myWebView = nil,它释放引用(除非它被声明assign),如果这是它的生命周期的结束,即将下降retainCount到 0,它会在回调中间立即释放。您可以通过retain在方法的开头(或至少在您将其设为 nil 之前)和autorelease在从回调返回之前 ing 来解决此问题。自动释放将等到回调完成后再处理释放。或者,您可以不将该属性设置为 nil,直到稍后您知道它是安全的。

于 2012-09-28T03:18:48.710 回答
0

在发布之前检查您的 webview 是否为零。

if(_webView !=nil){
  if (_webView.isLoading) {
    [_webView stopLoading];
  }
    [_webView removeFromSuperview];
    _webView.delegate = nil;
    [_webView release];
    _webView = nil;
}
于 2012-09-28T03:26:29.590 回答