后台執行
dispatch_async(dispatch_get_global_queue(0, 0), ^{ //后台程執行 something; });
主線程執行
dispatch_async(dispatch_get_main_queue(), ^{ // 主線程執行something; });
一次性執行
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 主要用於單例 });
延遲執行
double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PE R_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // code to be executed on the main queue after delay });
創建自定義的線程
dispatch_queue_t myQueue = dispatch_queue_create("com.cnblogs.yybz", NULL); dispatch_async(myQueue, ^{ // your code });
設置自定義線程的優先級
dispatch_queue_t myQueue = dispatch_queue_create("com.cnblogs.yybz", NULL); dispatch_queue_t globalHightQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); dispatch_set_target_queue(myQueue, globalHighQueue);
組
dispatch_group_async(group, queue, ^{ // code }); dispatch_group_wait(group, DISPATCH_TIME_FOREVER); //超時參數 dispatch_group_notify(group, queue, ^{ // code }); dispatch_group_enter(group); dispatch_async(queue, ^{ //code dispatch_group_leave(group); });
並行同步執行
/** @parameter iterations 迭代器數量 @parameter queue 提交任務的隊列 @parameter (^block)(size_t) 任務Block,size_t 為迭代器下標 **/ dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t));
隊列掛起與恢復
dispatch_suspend(queue);
dispatch_resume(myQueue);
信號量
dispatch_semaphore_create; //創建一個semaphore dispatch_semaphore_signal; //發送一個信號 dispatch_semaphore_wait; //等待信號