GCD小總結

主線程:UI線程,  顯示、刷新UI界面,處理UI控件的事件安全

 

2、線程同步併發

 1.實質:爲防止多個線程搶奪同一個資源在成的數據安全問題異步

 2.實現:給代碼加一個互斥鎖。async

3、GCD函數

1.隊列和任務spa

 1>任務:須要執行什麼操做    用block來封裝任務線程

 2>隊列存聽任務code

  全局併發隊列:能夠讓任務併發執行orm

  dispatch_queue_t queue = dispatch_global_queue(IDSPATCH_QUEUE_PRIORITY_DEFAULT,0);隊列

  本身建立的串行隊列:讓任務一個接一個執行

  dispatch_queue_t queue = dispatch_queue_create("cn.yan.queue",NULL);

  主隊列:讓任務在主線程執行

  dispatch_queue_t queue = dispatch_get_main_queue();

 

2.執行任務的函數

 1》同步執行:不具有開啓新線程的能力

dispatch_sync

 2》異步執行:具有開啓新線程的能力

dispatch_async

 

3.常見組合

 1>dispatch_async +全局併發隊列

 2>dispatch_async+本身建立的串行隊列

 

4.線程間的通訊(掌握)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

  全局併發隊列  執行耗時的異步操做

  dispatch_async(dispatch_get_main_queue(),^{

  回到主線程,執行UI刷新操做

});

});

 

5.GCD的全部的API都在libdispatch.dylib,Xcode會自動導入這個庫

    主頭文件:#import <dispatch/dispatch.h>

 

6.延遲執行

 1》perform 3秒後自定回到當前線程調用self的download:方法,並傳遞參數

  [self performSelector(download:) withObject:@"http://555.jpg" afterDelay:3];

 2>dispatch_after

  任務放到那個隊列中執行    延時多少秒

全局併發隊列 diapatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY,0);

時間  double delay = 3; 延時多少秒

dispatch_after(DISPATCH_TIME_NOW,delay,queue,^{

  ///3秒後要執行的任務

});

 

7.一次性代碼

 static dispatch_once_t onceToken;   隊列

dispatch_once(&onceToken,^{

  在程序運行過程當中,永遠只執行一次

});

相關文章
相關標籤/搜索