GCD&NSOperation

1812 ワード

GCD&NSOperationの違い


NSOperation:
  • はOCでGCDのパッケージ
  • です
  • iOS 2.0が発売され、GCDが発売された後、アップルはNSOperationの下層に
  • を書き直した.
  • コアコンセプト:「オペレーション(非同期で実行されるタスク)」を「キュー(グローバル)」
  • に追加
  • はGCDが実現しにくい機能を提供しています
  • 同時同時実行の操作数を制限する:(iOS 7.0以前、GCDまたはNSOperatioinを使用する最大のスレッド数は一般的に5~6本しかない;iOS 8.0以降、スレッド数は大きくなる)
  • キューを一時停止/継続/キャンセルするすべてのタスク
  • タスクを指定できる「依存」関係

  • GCD:
  • はC言語であり、マルチコア向けの同時技術
  • である.
  • iOS 4.0から発売された
  • コアコンセプト:「タスク(block)」をキュー(グローバル/シリアル/同時/プライマリ)に追加し、タスクを実行する関数(同期/非同期)
  • を指定します.
  • 高度な機能
  • 遅延動作
  • 使い捨て
  • スケジューリンググループ

  • GCDコンセプト:

  • タスクをキューに追加し、タスクを実行する関数
  • を指定します.
  • の3要素:タスク、キュー、タスクを実行する関数
  • タスクはblockパッケージを使用
    タスクを実行する関数:1.非同期dispatch_async*現在の文の実行が完了するのを待つ必要はありません.次の文を実行できます.*スレッドがblockを実行するタスクを開きます.
    2.   dispatch_sync
       *  , 
       *  
       *   block  
    

    キュー-タスク1のスケジュールを担当します.シリアルキュー*一度に1つのタスクしかスケジュールできません*dispatch_queue_create("name", NULL);
    2.  
        *  
        * dispatch_queue_create("name", DISPATCH_QUEUE_CONCURRENT);
    
    3. 
       *  
       *  
       *  , 
       * dispatch_get_main_queue();
    

    小結

  • スレッドが開かないこととタスクを実行する関数が関係しています:非同期、同期が開かない
  • 何本のスレッドを開くかはキューによって決定される:シリアルキューは1本のスレッドを開き、パラレルキューはN本のスレッド
  • を開く.

    実際の開発では,スレッド数がどのように決定されるか

  • WIFI下、一般6本
  • 3 G/4 Gモバイル開発時、2~3本
  • NSOperation

  • NSOperationは「抽象クラス」であり、
  • を直接使用することはできない.
  • 抽象クラスの使用は、サブクラス共通の属性およびメソッド
  • を定義することである.
  • アップルのヘッダファイルでは、抽象クラスとサブクラスの定義の中には、同じヘッダファイルの
  • があります.
  • すでに学習した抽象類は
  • UIGestureRecognizer
  • CAAnimation
  • CAPropertyAnimation

  • NSOperationのサブクラス
  • NSInocationOperation
  • NSBlockOperation

  • NSOperationQueueキュー
  • コードリンク