iOS開發——GCD多線程詳解

GCD多線程詳解


1. 什麼是GCD

Grand Central Dispatch 簡稱(GCD)是蘋果公司開發的技術,簡單來講,GCD就是iOS一套解決多線程的機制,使用GCD可以最大限度簡化多線程編程數據庫

2. 簡單使用GCD

/**
 *  在主線程執行
 */
dispatch_async(dispatch_get_main_queue(), ^{
    ;
});
/**
 *  在後臺線程執行
 */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    ;
});
/**
 *  只執行一次
 *  (特別適合在單例中使用)
 */
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    ;
});
/**
 *  延遲X秒執行
 */
double delayTime = 2.0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    ;
});

3. GCD多線程的坑

  • 因爲使用Block做爲線程執行方法,因此Block的坑都要注意,好比__weak__block
  • 全部的UI變化都要在主線程完成,後臺線程的UI變化代碼不會當即起做用,只有在主線程改變UI才能當即起變化

4. GCD高級用法

  • 建立串行線程
    串行線程對於一些須要串行運行的代碼來講很是有用,好比說數據庫的操做或者文件的操做
/**
 *  建立一個串行線程隊列SerialQuene,一次只執行一個任務
 *
 *  @param "com.SerialQuene" 隊列名,通常爲com.quene名字
 *  @param NULL              NULL就建立Serial線程
 *
 */
dispatch_queue_t serialQuene = dispatch_queue_create("com.SerialQuene", NULL);
  • 建立並行線程
/**
 *  建立一個並行線程隊列ConcurrentQuene,一次能並行執行多個任務,完成的時間不定
 *
 *  @param "com.ConcurrentQuene"        隊列名,通常爲com.quene名字
 *  @param DISPATCH_QUEUE_CONCURRENT    建立一個並行Concurrent線程
 *
 */
dispatch_queue_t concurrentQuene = dispatch_queue_create("com.ConcurrentQuene", DISPATCH_QUEUE_CONCURRENT);
  • 在同一個線程組執行多個線程,並在線程都執行完畢後作出響應
/**
 *  建立一個Group,在Group中執行的線程都結束了之後會通知notify執行
 */
dispatch_queue_t quene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, quene, ^{
    NSLog(@"1");
});
dispatch_group_async(group, quene, ^{
    NSLog(@"2");
});
dispatch_group_async(group, quene, ^{
    NSLog(@"3");
});
dispatch_group_notify(group, quene, ^{
    NSLog(@"等到group全部線程全都執行完了之後纔會執行");
});
相關文章
相關標籤/搜索