1

メインスレッドではなく NSOperation を実行しています。UITableViewController から生成されます。操作が完了したら、一部のデータが変更されたため、テーブルビューをリロードしたいと思います。バックグラウンドで完了時に通知するデリゲートを設定しました。完了したら、特に performSelectorOnMainThread を使用して、メイン スレッドで reloadData のラッパーを呼び出します。

ほとんどの場合、これはうまく機能しますが、元の (edit)tableViewController (/edit) が解放され、ゾンビ コールが発生する可能性が 0 ではありません。

したがって、質問は2つの部分にあります。

  1. オブジェクトを保持せずにバックグラウンド スレッドからデリゲートを持つことは可能ですか?
  2. これは単にデザインが悪いのでしょうか?代わりに NSNotifications を使用する必要がありますか? この場合、それが好ましい通知方法でしょうか?

前もって感謝します。

4

1 に答える 1

1

デリゲートに対する操作が呼び出される前に解放される可能性がある場合は、デリゲートを保持する必要があります。デリゲート コールバックが呼び出され、tableViewController が使用されない場合を処理するように、tableViewController で状態を設定できます (基本的に、コールバックはノーオペレーションとして機能します)。操作が完了したら、デリゲート オブジェクトを解放します。

これは悪い設計ではありませんが、これらの条件を処理する必要があるだけです。

于 2011-05-19T18:36:17.133 に答える