インスタンス変数としてを持っているNSOperationQueue
ViewControllerがある場合、View Controllerがアンロードされると、キューで実行されている操作はどうなりますか?
1 に答える
私の元の答えの愚かな間違い。私は以前にこの正確なドキュメントを間違って読んだことがあります。本当の答えは、何が起こるかが定義されていないか、少なくとも文書化されていないということです。
この回答で述べたように、操作キューが保持されることを示唆するいくつかのことがあります(ブロックの実行中にGCDキューが保持されるという事実など)。
NSOperationQueueの自動解放に関するこの質問も、同じことを示しています。
NSOperationQueueが解放されたときに何が起こるかについては、ドキュメントには何も記載されていません。
もちろん、「指定された操作は実行が終了するまでキューに残る」と解釈することもできます。キューに入れられた操作が実行を終了するまでキューは消えないのですが、それでも私はそれを当てにしません。
ただし、操作が実行されないようにするcancelAllOperations
場合は、これを防止したい場合は、View Controllerがアンロードされるタイミングを操作キューに通知することで、操作をキャンセルできます。操作は自分自身で停止するわけではないことに注意してください。彼らはそこでチェックif ([self isCancelled]) { ... }
して停止する必要があります。
元の答え:
キューを保持しているため、すべての操作は実行を終了します。のドキュメントからaddOperation:
討論
追加されると、指定された操作は実行が終了するまでキューに残ります。