0

私はまだNSOperationsの理解に取り組んでいます。私は、ユーザーがHTTPリクエストを開始し、そのリクエストをNSOperationオブジェクトにカプセル化してから忘れることを望みます。私はメインコードでNSOperationオブジェクトをリリースしたいと思いますが、NSOperationQueueによって保持されています。NSOperatioQueueによるNSOperation保持

各NSOperationは、コアデータに結果を保存することで完了し、またはそれをキャンセルすることができます。しかし、私は、個々の操作ではなく、すべての未処理操作を取り消す必要があると思います。たとえば、アプリケーションが終了している場合は、それらをすべてキャンセルすることがあります。

これは私は、ユーザーがそれらを個別に追跡することなく、要求を開始し続けるようにすることができます。同じオブジェクトポインタを再利用してNSOperationオブジェクトを初期化し、キ​​ューに入れてから解放することができます。これは、NSOperationQueueが追加されたときにNSOperationを保持していれば、非常に簡単です。

は、私はキューが操作を保持することを修正し、それがインスタンス化された場所、私はそれを解放することができますでしょうか?また

、私は(私はまだ試していません)ARCに新しいですから、どのように私はこの所有権を譲渡しますか? NSOperationにキュー内で強いプロパティ属性を持たせたいと思うが、弱いプロパティ属性でインスタンス化したいとは思っていない。

答えて

1

あなたは正しいです。 NSOperationQueuesはそれに追加されたNSOperationsを保持します(強参照)。 は、キューから自動的に削除され、操作が終了すると解放されます。

NSOperationサブクラスがisExecutingに対応するKVOであり、isFinishedが失敗してNSOperationQueueがNSOperationが完了しているかどうかわからないことを確認する必要があります。

ARCを使用すると、この場合、所有権を「移転する」必要はありません。 Core Foundationオブジェクト(CF * CreateやCF * allocなどのメソッド)を作成し、それをObjective-Cオブジェクトに割り当てるときにのみ、所有権を移転します。

あなたが興味を持っている場合、私はARC on my blogについて詳細に書きました。

また、MKNetworkKitであなたが必要とするほとんどすべての面倒を私が書いたネットワーキング・フレームワークを見てみたいことがあります。

+0

ありがとう、Mugunth。両方の参照は素晴らしいリソースのように見えます。私はすでにNSOperationについて知っておくべき基本的なことのいくつかをよりよく理解するためにMKNetworkKitを精査しました。 ARCのブログはこれまでのところ良い読書です。それは非常に完全に見える。 – Jim

+0

"NSOperationサブクラスがisExecutingに対応するKVOであり、isFinishedが失敗してNSOperationQueueがNSOperationが完了しているかどうかわからないことを確認する必要があります。 - 強調する価値がある。 – prajul

関連する問題