1.延遲操作
2.一次性代碼
3.隊列組
/** * 延遲執行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒后異步執行這里的代碼... }); 延遲執行:不需要再寫方法,且它還傳遞了一個隊列,我們可以指定并安排其線程。 如果隊列是主隊列,那么就在主線程執行,如果隊列是并發隊列,那么會新開啟一個線程,在子線程中執行。 */-(void)test1 { NSLog(@"打印當前線程---%@", [NSThread currentThread]); //延遲執行,第二種方式 //可以安排其線程(1),主隊列 dispatch_queue_t queue= dispatch_get_main_queue(); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), queue, ^{ NSLog(@"主隊列--延遲執行------%@",[NSThread currentThread]); }); //可以安排其線程(2),并發隊列 //1.獲取全局并發隊列 dispatch_queue_t queue1= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.計算任務執行的時間 dispatch_time_t when=dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)); //3.會在when這個時間點,執行queue中的這個任務 dispatch_after(when, queue1, ^{ NSLog(@"并發隊列-延遲執行------%@",[NSThread currentThread]); });}
/** * 2.使用dispatch_once一次性代碼 使用dispatch_once函數能保證某段代碼在程序運行過程中只被執行1次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 只執行1次的代碼(這里面默認是線程安全的) }); 整個程序運行過程中,只會執行一次。 */- (void)test2 { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"該行代碼只執行一次"); });}
/** * 隊列組 */- (void)test3 { dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 執行1個耗時的異步操作 }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 執行1個耗時的異步操作 }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 等前面的異步操作都執行完畢后,回到主線程...(結果處理) });}
新聞熱點
疑難解答