GCD的簡單用法

  1. /* 
  2.      建立一個隊列用來執行任務,TA屬於系統預約義的並行隊列即全局隊列,目前系統預約義了四個不一樣運行優先級的全局隊列,咱們能夠經過dispatch_get_global_queue來獲取它們 
  3.      四種優先級 
  4.      DISPATCH_QUEUE_PRIORITY_HIGH 
  5.      DISPATCH_QUEUE_PRIORITY_DEFAULT 
  6.      DISPATCH_QUEUE_PRIORITY_LOW 
  7.      DISPATCH_QUEUE_PRIORITY_BACKGROUND 
  8.       
  9.      不得已狀況下可用dispatch_queue_create("newQueue", NULL); 建立,注意若是用此種方法建立需調用dispatch_release(queue)來釋放此隊列 
  10.      */  
  11.     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
  12.     //執行隊列  
  13.     dispatch_async(queue, ^{  
  14.         //此隊列執行的代碼  
  15.     });  
  16.     //若是有多個隊列執行,能夠建立一個隊列數組  
  17.     dispatch_group_t queueGroup = dispatch_group_create();  
  18.     //把一個個隊列添加到數組中,先把任務添加到隊列,而後再把隊列和數組關聯  
  19.     dispatch_group_async(queueGroup, queue, ^{  
  20.         //要執行的任務  
  21.     });  
  22.       
  23.     /* 
  24.      dispatch_group_notify 
  25.         指定一個額外的程序塊,該程序塊將在組中的全部程序塊即將運行完成時執行 
  26.      dispatch_get_main_queue() 
  27.         系統默認的一個串行隊列與主線程功能相同。實際上,提交至main queue的任務會在主線程中執行,main queue能夠調用dispatch_get_main_queue()來得到,由於main queue是與主線程相關的 
  28.      */  
  29.     dispatch_group_notify(queueGroup, dispatch_get_main_queue(), ^{  
  30.         //執行代碼  
  31.     });  
  32.     //獲取執行的隊列  
  33.     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  34.         //執行完後執行此處代碼  
  35.     });  
  36.     //dispatch_barrier_async是在前面的任務執行結束後它才執行,並且它後面的任務等它執行完成以後纔會執行  
  37.     dispatch_barrier_async(queue, ^{  
  38.         //執行代碼  
  39.     });  
  40.       
  41.     //dispatch_apply 執行某個代碼片斷N次  
  42.     dispatch_apply(5, queue, ^(size_t index) {  
  43.         // 執行5次  
  44.     });  
  45.       
  46.     /* 
  47.      迴歸主線程 
  48.      __block 能夠在block內部修改的變量,用此修飾符標識 
  49.      */  
  50.     __block NSString *updateStr = @"1";  
  51.     dispatch_async(dispatch_get_main_queue(), ^{  
  52.         NSLog(@"迴歸主線程");  
  53.         updateStr = @"2";  
  54.     });  
  55.       
  56.     //代替for循環 若是for循環中處理的任務是可併發的(併發,在操做系統中,是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行),顯然放到一個線程中處理是很慢的,GCD提供兩個函數dispatch_apply和dispatch_apply_f,dispatch_apply是用於Block的,而dispatch_apply_f能夠用於c函數,它們能夠替代可併發的for循環,來並行的運行而提升執行效率  
  57.     int count = 10;  
  58.     for (int i = 0; i < count; i++) {  
  59.         //do a lot of work here.  
  60.     }  
  61.     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
  62.     dispatch_apply(count, queue, ^(size_t i) {  
  63.         //do a lot of work here.  
  64.     });



彙總的至關不錯,轉過來保存一下數組

原文地址:http://blog.csdn.net/like7xiaoben/article/details/25629365併發

相關文章
相關標籤/搜索