dispatch_sync(dispatch_queue_tqueue,dispatch_block_tblock);
dispatch_async(dispatch_queue_tqueue,dispatch_block_tblock);
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_tpriority,//队列的优先级unsigned longflags);//此参数暂时无用,用0即可
dispatch_queue_t queue =dispatch_get_global_queue(0,0); //获得全局并发队列
串行队列
dispatch_queue_t dispatch_queue_create(constchar*label, //队列名称 dispatch_queue_attr_t attr);//队列属性,一般用NULL即可
dispatch_queue_t queue =dispatch_queue_create("WT",NULL); // 创建
dispatch_release(queue);// 非ARC需要释放手动创建的队列
dispatch_queue_tqueue =dispatch_get_main_queue();
各种队列的执行效果
线程间通信
dispatch_async(dispatch_get_global_queue(0,0), ^{
//执行耗时的异步操作...
dispatch_async(dispatch_get_main_queue(),^{
// 回到主线程,执行UI刷新操作
});
});
延时操作
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];
// 2秒后再调用self的run方法
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
//2秒后异步执行这里的代码...
});
队列组
有这么一种需求,分别执行2个异步操作,等两个操作都执行完毕后回到主线程执行操作
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(group, queue, ^{
// 一步操作一
});
dispatch_group_async(group, queue, ^{
// 一步操作二
});
dispatch_group_notify(group, queue, ^{
// 回到主线程执行操作
dispatch_async(dispatch_get_main_queue(), ^{
});
});