標籤:void pretty 判斷 時間函數 關聯 keyword 代碼 迭代 時間
dispatch_apply的用法
並行類比for迴圈,將指定的代碼迴圈10次,一般會把這些代碼附加到一個queue上,然後在 dispatch_apply裡並行
dispatch_queue_t queue = dispatch_get_globel_queue(DISPATCH_QUEUE_PREORITY_DEFAULT,0)
dispatch_apply(10, queue, ^(size_t index){
NSLog("並存執行--%@",index);
});
dispatch_apply_f的用法
dispatch_apply 和 dispatch_apply_f 是同步函數,會阻塞當前線程直到所有迴圈迭代執行完成。當提交到並發queue時,迴圈迭代的執行順序是不確定的
dispatch_after
延遲指定時間之後執行任務
dispatch_after(dispatch_time_t when, dispatch_queue_t queue, ^(void)block)
when:順延強制時間 一般是一個這樣的時間函數: dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC))
queue:隊列 dispatch_get_main_queue()或者 dispatch_get_global_queue()
block:執行的任務
dispatch_once
dispatch_once(dispatch_once_t *predicate, ^(void)block)
predicate: 用來判斷需要執行的任務是否執行完成
block :需要執行的一次性任務
+ (instantClass *)sharedClient {
static instantClass *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[instantClass alloc] init];
});
return _sharedClient;
}
dispatch_group
dispatch_grpup,把若干個任務放到一個dispatch group中
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PREORITY_DEFAULT,0);
dispatch_queue_group group = dispatch_group_craete();
dispatch_group_aysnc(group, queue,^{
//do some async work
});
dispatch_group_async 和 dispatch_async一樣,會把任務放到queue中執行,只不過它比dispatch_async多了一步操作,就是把這個任務和group相關聯,
把這些任務放到group之後,我們可以調用dispatch_group_wait來等待任務完成。若任務已經全部完成或者為空白,直接返回,否則等待所有任務完成之後返回。注意返回之後任務清空。
dispatch_group_wait(group,DISPATCH_TIME_FORVER);
dispatch_release(group);
dispatch_apply的用法