GCD では、4 つのグローバル優先度キュー (高、デフォルト、低、バックグラウンド) に従って、ブロックをキューにディスパッチできます。アプリに複数の NSOperationQueue がありますが、それぞれを異なる優先度で実行したいと考えています。私が理解しているように、NSOperationQueueはGCDの抽象化であり、NSOperationQueueに異なる優先度を設定したいと考えています(GCD優先度キューに似ています)。そうする方法はありますか?(操作に優先順位を設定することは可能ですが、キュー自体には設定できないことがわかりました)。
6954 次
3 に答える
5
iOS 8 以降、NSOperationQueue にはqualityOfService
プロパティがあり、OP が意味すると私が考えていることを行います。クラスリファレンスから:
このプロパティは、キューに追加された操作オブジェクトに適用されるサービス レベルを指定します。操作オブジェクトに明示的なサービス レベルが設定されている場合は、代わりにその値が使用されます。[...]
サービス レベルは、操作オブジェクトが CPU 時間、ネットワーク リソース、ディスク リソースなどのシステム リソースにアクセスできる優先度に影響します。サービス品質レベルが高い操作は、タスクをより迅速に実行できるように、システム リソースよりも優先度が高くなります。サービス レベルを使用して、明示的なユーザー要求に応答する操作が、重要度の低い作業よりも優先されるようにします。
また、iOS 8 では、どの GCD キューをunderlyingQueue
プロパティで使用するかを変更できるため、必要な優先度を持つグローバル GCD キューを選択できます。
于 2014-11-09T14:41:23.307 に答える