6

GCD では、4 つのグローバル優先度キュー (高、デフォルト、低、バックグラウンド) に従って、ブロックをキューにディスパッチできます。アプリに複数の NSOperationQueue がありますが、それぞれを異なる優先度で実行したいと考えています。私が理解しているように、NSOperationQueueはGCDの抽象化であり、NSOperationQueueに異なる優先度を設定したいと考えています(GCD優先度キューに似ています)。そうする方法はありますか?(操作に優先順位を設定することは可能ですが、キュー自体には設定できないことがわかりました)。

4

3 に答える 3

5

iOS 8 以降、NSOperationQueue にはqualityOfServiceプロパティがあり、OP が意味すると私が考えていることを行います。クラスリファレンスから:

このプロパティは、キューに追加された操作オブジェクトに適用されるサービス レベルを指定します。操作オブジェクトに明示的なサービス レベルが設定されている場合は、代わりにその値が使用されます。[...]

サービス レベルは、操作オブジェクトが CPU 時間、ネットワーク リソース、ディスク リソースなどのシステム リソースにアクセスできる優先度に影響します。サービス品質レベルが高い操作は、タスクをより迅速に実行できるように、システム リソースよりも優先度が高くなります。サービス レベルを使用して、明示的なユーザー要求に応答する操作が、重要度の低い作業よりも優先されるようにします。

また、iOS 8 では、どの GCD キューをunderlyingQueueプロパティで使用するかを変更できるため、必要な優先度を持つグローバル GCD キューを選択できます。

于 2014-11-09T14:41:23.307 に答える