串聯(lián)GCD知識點

串聯(lián)GCD知識點

  1. dispatch_queue_t // 聲明一個queue
  2. dispatch_queue_create(const char * label, dispatch_queque_attr_t attr) // 創(chuàng)建一個串行(DISPATCH_QUEUE_SERIAL,一個隊列,配上一個線程)或并發(fā)queue(DISPATCH_QUEUE_CONCURRENT, 一個隊列,配上若干個線程)
  3. 異步執(zhí)行:dispatch_async(dispatch_queue_t queue, dispatch_block_t block) 同步執(zhí)行:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block) // 使用
  4. main dispatch queue // 有且只有一個主隊列,所有任務(wù)都在主線程中執(zhí)行
  5. dispatch_get_global_queue(long identifier, unsigned long flags) // 使用GCD默認提供的全局并發(fā)隊列, 第一個參數(shù)是優(yōu)先級,第二個參數(shù)是做標記,供未來使用,大多數(shù)情況下應置為0
  6. 使用serial queue的特性保證資源的線程安全。相比lock unlock,更安全,性能更好,更清晰。
  7. GCD死鎖相關(guān)
  8. dispatch_semaphore_t // 聲明
  9. dispatch_semaphore_create(long value) // 創(chuàng)建
  10. dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout) // 等待信號量--(進入停車場)
  11. dispatch_semaphore_signal(dispatch_semaphore_t dsema) // 觸發(fā)信號量++(離開停車場)
  12. dispatch_semaphore_create(1) // 相當于加鎖
  13. 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");
  1. dispatch_group_t // 聲明一個group
  2. dispatch_group_create(void) // 創(chuàng)建一個group
  3. dispatch_group_async(group,queue,block) // 給任務(wù)設(shè)置group
  4. dispatch_group_wait(group, timeout) //等待group里所有任務(wù)完成。示例代碼:
    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;
   });
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. 重點: 1.dispatch_queue_create(生成Dispatch Queue) 2.Main D...
    BestJoker閱讀 1,685評論 2 2
  • 章節(jié)目錄 什么是GCD? 如何在多條路徑中執(zhí)行CPU命令列? 即使多線程存在很多問題(如數(shù)據(jù)競爭、死鎖、線程過多消...
    DrunkenMouse閱讀 978評論 1 13
  • GCD筆記 總結(jié)一下多線程部分,最強大的無疑是GCD,那么先從這一塊部分講起. Dispatch Queue的種類...
    jins_1990閱讀 836評論 0 1
  • 你慢很內(nèi)疚青年時期妞妞們
    XLL心靈咖啡閱讀 243評論 0 0
  • 板橋下游過群鴨, 青嫩柳羞了紅霞。 秋風起乍, 一池驚滿漣漪, 圈起卷卷詩情畫。
    劉陌Stanger閱讀 176評論 0 0

友情鏈接更多精彩內(nèi)容