GCD常用函數

  • 延遲執行
/*
第一個參數:DISPATCH_TIME_NOW 從現在開始計算時間
第二個參數:延遲的時間 2.0 * GCD時間單位:納秒
第三個參數:隊列
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
    });
  • 一次性代碼
    //不能使用到懶加載
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
  • 柵欄函數
//柵欄函數不能使用全局并發隊列
dispatch_barrier_async(dispatch_queue_create("download", DISPATCH_QUEUE_PRIORITY_DEFAULT), ^{
        
    });
  • 快速迭代
/*
第一個參數:遍歷的次數
第二個參數:隊列(并發隊列)
第三個參數:索引
*/
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) {
        
    });
  • 隊列組
    //1.創建隊列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    //2.創建隊列組
    dispatch_group_t group = dispatch_group_create();
    
    //3.異步函數
    dispatch_group_async(group, queue, ^{
        
    });
    dispatch_group_async(group, queue, ^{
        
    });
    
    //攔截通知,當隊列組中所有的任務都執行完畢的時候會進入到下面的方法
    //本身是異步的
    dispatch_group_notify(group, queue, ^{
        
    });
    
    //等待,死等.直到隊列組中所有的任務都執行完畢之后才能執行
    //本身是阻塞的
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
  • 定時器
//1.創建GCD中的定時器
/*
第一個參數:DISPATCH_SOURCE_TYPE_TIMER 表示是定時器
第二個參數:描述信息,線程ID
第三個參數:更詳細的描述信息
第四個參數:隊列,決定GCD定時器中的任務在哪個線程中執行
*/
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
//2.設置定時器(起始時間|間隔時間|精準度)
/*
第一個參數:定時器對象
第二個參數:起始時間
第三個參數:間隔時間
第四個參數:精準度 絕對精準0
*/
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
//3.設置定時器執行的任務
    dispatch_source_set_event_handler(timer, ^{
        
    });
//4.啟動任務
    dispatch_resume(timer);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容