DispatchQueue

1757 ワード

  • DispatchQueueはシリアルと同時に分けられ、その完全な初期化方法は:DispatchQueue.init(label: String, qos: DispatchQoS, attributes: DispatchQueue.Attributes, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency, target: DispatchQueue?)で表示され、これらのパラメータにはlabelを除いてデフォルト値があります(labelはキューのラベルを表し、com.onevcat.Kingfisher.Animator.preloadQueueなどの逆ドメイン名文字列に値を伝えることを推奨します).label以外のパラメータがデフォルト値を使用する場合、初期化メソッドはシリアルキューを返します.コンカレントキューを返す必要がある場合、パラメータattributesは.concurrentでいいです.DispatchQueue.Attributesは、concurrentとinitiallyInactiveの2つの静的変数を提供する構造体タイプです(シリアルキューを表す静的変数はありません).attributesパラメータがinitiallyInactiveに値している場合、タスクは自動的に実行されず、開発者がactivate()トリガを手動で呼び出す必要があります.ただし、コードはシリアルで行われています.タスクを手動でトリガーし、並列に実行する場合は、attributesパラメータを指定して、[.concurrent,.initiallyInactive]の配列を受け入れることができます.DispatchQoS:1つの構造体がキューを表す優先度であり、6の中から選択可能な値がある.優先度が高い順に
  • である.
             public static let userInteractive: DispatchQoS
             public static let userInitiated: DispatchQoS
             public static let utility: DispatchQoS
             public static let background: DispatchQoS
             //default unspecified userInteractive background
             // , .
             public static let `default`: DispatchQoS
             public static let unspecified: DispatchQoS
    

    DispatchQueue.AutoreleaseFrequencyには、次の3つの属性値があります.inherit、.それは...never.
  • .inherit:不確定で、以前のデフォルトの動作も現在のデフォルト値
  • です.
  • .workItem:実行されるタスクごとに自動リリースプールを作成し、プロジェクトが完了すると一時オブジェクト
  • をクリーンアップします.
  • .Never:GCDでは、自動リリースプールパラメータtargetを管理していません.作成するキューとキューtargetの優先度が同じであることを指定します.setTarget(queue:DispatchQueue?)を使用することもできます.関数はqueueと同じ優先度を指定します.開発者自身がキューを作成するほか、DispatchQueueを利用することもできる.mainは、主キュー(主キューもシリアルキューに属する)、DispatchQueueを取得する.Global(qos:DispatchQoS.QoSclass)は、グローバル同時キューを取得する.