私が取り組んでいるプロジェクト (このコードを取得し、デバッグしようとしています) では、オブザーバーによって呼び出される関数があります。オブザーバーは、画面に表示されるデータを更新するメソッドを呼び出します。この更新が行われている間 (更新が行われるまでに数秒かかります)、ユーザーはナビゲーション バーの [戻る] ボタンを押すと、dealloc 呼び出しが発生します。メソッドの実行中に、dealloc 呼び出しによってすべての ivar が解放され、メソッドが ivar にアクセスしようとすると、最終的に EXC_BAD_ACCESS が発生します。update メソッドの構造体も@synchronized
ブロックで囲みます。
- (void)update {
@synchronized(self){
// some code here...
// Also access ivars here.
}
}
割り当てを解除する前に、まずメソッドを終了するようにコントローラに指示するにはどうすればよいですか? dealloc で条件付きの while ループを実行しようとしましたが、効率的ではないようです。また、コントローラーが解放された場合も完全には実行されず、デッドロックのままになります。解決策は簡単な気がしますが、長い一日の仕事で頭がおかしくなり、それについて考えることができません。