0

デリゲート コールバックの途中で UIViewController の割り当てが解除されています。何が起こるかは次のとおりです。

  1. UIWebViewロードを開始します
  2. ユーザーがキャンセルを押す
  3. UIWebView滑り出し始める
  4. リクエストが終了し、didFinishハンドラを呼び出します
  5. didFinishハンドラーの真ん中 (2 行のコードの間のように) ビューコントローラーは dealloc を実行します
  6. すべての割り当てが解除され、デリゲートがクリアされ、Web リクエストが停止されました
  7. ハンドラーが割り当て解除された状態で再開し、BAD_ACCESS 例外が発生する

確認しました - すべてがメイン スレッドで実行されています。

ハンドラーの途中で dealloc が呼び出されないようにするにはどうすればよいですか?

補足質問 - これがすべての代表者にとって問題ではないのはなぜですか? これは私を怖がらせます。

4

2 に答える 2

0

ハンドラーの途中で dealloc が呼び出されないようにするにはどうすればよいですか?

そのコールバックの途中で解放しないでください。を設定していると思いますがself.myWebView = nil、それは参照を解放し (宣言されていない限りassign)、それがそのライフサイクルの終わりである場合、つまりretainCountを 0 にドロップすると、コールバックの途中ですぐに割り当てが解除されます。retainメソッドの開始時 (または少なくとも nil する前) に Web ビューをautoreleaseing し、コールバックから戻る直前に ingを実行することで、これを回避できます。自動リリースは、リリースを処理する前にコールバックが終了するまで待機します。または、後で安全であることがわかるまで、そのプロパティを nil に設定することはできません。

于 2012-09-28T03:18:48.710 に答える
0

リリースする前に、webview が nil かどうかを確認してください。

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