直列GCD知識点

3188 ワード

直列GCD知識点

  • dispatch_queue_t//queue
  • を宣言
  • dispatch_queue_create(const char * label, dispatch_queque_attr_t attr)//シリアル(DISPATCH_QUEUE_SERIAL、1つのキュー、1つのスレッドに割り当てる)または同時queue(DISPATCH_QUEUE_CONCURRENT、1つのキュー、いくつかのスレッドに割り当てる)
  • を作成
  • 非同期実行:dispatch_async(dispatch_queue_t queue, dispatch_block_t block)同期実行:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block)//
  • 使用
  • main dispatch queue//プライマリ・キューは1つしかありません.すべてのタスクはプライマリ・スレッドで
  • を実行します.
  • dispatch_get_global_queue(long identifier, unsigned long flags)//GCDのデフォルトで提供されているグローバル同時キューを使用します.最初のパラメータは優先度で、2番目のパラメータはタグを付けて、将来の使用に使用します.多くの場合、0
  • に設定します.
  • は、serial queueの特性を使用して、リソースのスレッドセキュリティを保証する.ロックunlockよりも安全で、パフォーマンスがより良く、より明確です.
  • GCDデッドロック関連
  • dispatch_semaphore_t//声明
  • dispatch_semaphore_create(long value)//作成
  • dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout)//待ち信号量--(駐車場に入る)
  • dispatch_semaphore_signal(dispatch_semaphore_t dsema)//トリガ信号量+(駐車場を離れる)
  • dispatch_semaphore_create(1)//ロック
  • に相当
  • dispatch_semaphore_create(0)//非同期スレッドで優先順位を制御するために使用される例は、次のとおりです:
  • dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
          NSLog(@"dispatch queue task");
          dispatch_semaphore_signal(semaphore);
      });
      dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
      NSLog(@"wait for dispatch queue task completed");
    
  • dispatch_group_t//group
  • を宣言
  • dispatch_group_create(void)//group
  • を作成
  • dispatch_group_async(group,queue,block)//タスク設定group
  • dispatch_group_wait(group, timeout)//groupのすべてのタスクが完了するのを待っています.サンプルコード:
  •     self.upImageView.image = nil;
       self.downImageView.image = nil;
       __block UIImage *upImage = nil;
       __block UIImage *downImage = nil;
       
       dispatch_group_t group = dispatch_group_create();
       
       dispatch_group_async(group, dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
           NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/h%3D300/sign=e1455acbde3f8794ccff4e2ee21b0ead/728da9773912b31bc351745a8c18367adab4e180.jpg"];
           NSData *data = [NSData dataWithContentsOfURL:url];
           upImage = [UIImage imageWithData:data];
           sleep(1);
       });
       
       dispatch_group_async(group, dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
           NSURL *url = [NSURL URLWithString:@"http://c.hiphotos.baidu.com/image/h%3D300/sign=f7cc32133001213fd03348dc64e536f8/fc1f4134970a304e5fc3a630d8c8a786c8175c12.jpg"];
           NSData *data = [NSData dataWithContentsOfURL:url];
           downImage = [UIImage imageWithData:data];
       });
       
       dispatch_async(dispatch_get_main_queue(), ^{
           dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
           self.upImageView.image = upImage;
           self.downImageView.image = downImage;
       });