Objective-Cでリスナー/オブザーバーをリリースしますか?

listener memory-management objective-c observer-pattern
Objective-Cでリスナー/オブザーバーをリリースしますか?

いつリスナーオブジェクトをリリースするのが適切なタイミングかわかりません。

NSURLConnectionのinitWithRequestメソッドを使用してURLを取得するオブジェクトAがあります。 initWithRequestでは、dataReceivedのイベントの後にリッスンするデリゲートが必要です…​ そのため、オブジェクトAはオブジェクトBを作成し、initWithRequestメソッドのデリゲートとして渡します。

データがネットワークから取得されると、オブジェクトBのメソッドが呼び出されます。 オブジェクトBがその作業を完了した後、誰がオブジェクトBをリリースする責任がありますか?!?

要約する:

オブジェクトAはオブジェクトBを作成し、イベントのリスナーにします。 イベントが発生し、オブジェクトBがジョブを実行します。 オブジェクトBがその仕事をした後、誰がそれをリリースする責任を持ちますか?!?

注意してくださいObjective-Cでオブザーバーを削除する方法については、多くの質問と回答があります。 とにかく、それらのすべては、彼らがあなたがKVOパターンを使用していると仮定したとわかりました。

  0  0


ベストアンサー

「データの受信を完了しました」メソッドでオブジェクトB自体を解放してみましたか? それはその耐用年数の終わりのように思われるでしょう。 または、オブジェクトAでそれへの参照を維持してから、オブジェクトAのdeallocメソッドで解放することもできます。

1


_
接続はデリゲートを保持します。 接続のロードが完了したとき、失敗したとき、またはキャンセルされたときにデリゲートを解放します。
_

NSURLConnectionはこの点で例外です-ほとんどのオブジェクトはデリゲートを保持しません。

したがって、この場合、* A *がBの使用を継続したい場合、オブジェクトAはオブジェクトBを保持する必要があります。 NSURLConnectionは、Bの独自の使用を処理します。

0


タイトルとURLをコピーしました