- 全局隊(duì)列
但是我們不需要用retain和release來(lái)管理全局的并發(fā)隊(duì)列,為全局隊(duì)列對(duì)于程序來(lái)說(shuō)是全局的傅事,retain和release會(huì)被全局隊(duì)列忽略呜师。所以,我們不需要存儲(chǔ)這些隊(duì)列的引用數(shù)浦楣,僅僅只需要在任何要使用它們的地方,調(diào)用dispatch_get_global_queue這個(gè)方法即可
dispatch_queue_t aQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//全局隊(duì)列的四種類型
<!--DISPATCH_QUEUE_PRIORITY_HIGH-->
<!--DISPATCH_QUEUE_PRIORITY_DEFAULT-->
<!--DISPATCH_QUEUE_PRIORITY_LOW-->
<!--DISPATCH_QUEUE_PRIORITY_BACKGROUND-->
DISPATCH_QUEUE_PRIORITY_BACKGROUND咪辱。被設(shè)置成后臺(tái)級(jí)別的隊(duì)列振劳,它會(huì)等待所有比它級(jí)別高的隊(duì)列中的任務(wù)執(zhí)行完或CPU空閑的時(shí)候才會(huì)執(zhí)行自己的任務(wù)。
- 創(chuàng)建串行 / 并發(fā)隊(duì)列
//串行隊(duì)列
dispatch_queue_t serialQueue;
serialQueue =
dispatch_queue_create("隊(duì)列名稱", NULL);
<!--NULL 也可為DISPATCH_QUEUE_SERIAL-->
//并發(fā)隊(duì)列
dispatch_queue_t concurrentQueue;
concurrentQueue =
dispatch_queue_create("隊(duì)列名稱", DISPATCH_QUEUE_CONCURRENT);
- 獲取Main Queue
dispatch_queue_t mainQueue;
mainQueue = dispatch_get_main_queue();
- 向隊(duì)列(queue)添加任務(wù)
dispatch_queue_t myCustomQueue;
myCustomQueue =
dispatch_queue_create("xyz", NULL);
///異步
dispatch_async(myCustomQueue, ^{
});
//同步執(zhí)行
dispatch_sync(myCustomQueue, ^{
});
- 任務(wù)執(zhí)行完后添加一個(gè)完成塊(Completion Block)
average_async(10, 10, dispatch_get_main_queue(), ^(int t) {
NSLog(@"t = %d",t);
});
void average_async(int t , int x ,
dispatch_queue_t queue, void (^block)(int t )){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int product = t * x ;
dispatch_async(queue, ^{
block(product);
});
});
}
- 并發(fā)執(zhí)行迭代循環(huán)
/// 沒(méi)有想到使用 場(chǎng)景 == 異步的 for(油狂,历恐,,)
dispatch_apply(100, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i) {
});
- 掛起和恢復(fù)隊(duì)列
dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("com.example.MyCustomQueue", NULL);
//掛起隊(duì)列
dispatch_suspend(myQueue);
//恢復(fù)隊(duì)列
dispatch_resume(myQueue);
/// 執(zhí)行掛起操作不會(huì)對(duì)已經(jīng)開(kāi)始執(zhí)行的任務(wù)起作用专筷,
/// 它僅僅只會(huì)阻止將要進(jìn)行但是還未開(kāi)始的任務(wù)弱贼。
- 信號(hào)量
http://blog.csdn.net/meegomeego/article/details/45192579
- 延時(shí)執(zhí)行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
- 一次執(zhí)行任務(wù)
在單例執(zhí)行模式中,能夠用到一次執(zhí)行任務(wù)磷蛹。蘋(píng)果提供的一次執(zhí)行機(jī)制吮旅,不僅能夠保證一次執(zhí)行,而且是線程安全的味咳。使用GCD的一次執(zhí)行庇勃,效率高,不要使用互斥鎖槽驶,效率太低责嚷。
static dispatch_once_t onceToken;
NSLog(@"onceToken %ld", onceToken);
dispatch_once(&onceToken, ^{
//未執(zhí)行這里時(shí),onceToken是0掂铐,處于可執(zhí)行狀態(tài)罕拂,一旦執(zhí)行之后,onceToken就變成-1堡纬,就再也不會(huì)執(zhí)行了
NSLog(@"%@", [NSThread currentThread]);
});