标签:
1.更新UI或者发送通知等操作注意回到主线程来执行。主队列只会在主线程中执行main_queue
2.dispatch_after函数最好在主队列执行
-(void)viewDidLoad{
NSLog(@"hello");
dispatch_queue_t mainQueue=dispatch_queue_create("wxy", DISPATCH_QUEUE_SERIAL);
dispatch_sync(mainQueue, ^{
NSLog(@"dddd");
});
NSLog(@"你好");
NSLog(@"%@",mainQueue);
NSLog(@"%@",dispatch_get_main_queue());
}//@1.先执行主队列的 NSLog(@"hello");
@2.执行“wxy”队列 NSLog(@"dddd");
@3.在执行主队列NSLog(@"你好");
如果你调用
dispatch_sync 并放在你已运行着的当前队列。这会导致死锁
-(void)viewDidLoad{
NSLog(@"hello");
dispatch_queue_t mainQueue=dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
NSLog(@"dddd");
});
NSLog(@"你好");
}
// NSLog(@"你好");是先于添加的任务,是没法完成的,要等到添加到dispatch_sync中的block先完成,但是这个block也没法完成,所以导致了死锁、
-(void)viewDidLoad{
NSLog(@"hello");
dispatch_queue_t mainQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(mainQueue, ^{
NSLog(@"1");
});
dispatch_sync(mainQueue, ^{
sleep(1.0);
NSLog(@"2");
});
dispatch_async(mainQueue, ^{
NSLog(@"3");
});
dispatch_sync(mainQueue, ^{
NSLog(@"4");
});
NSLog(@"你好");
//mainqueue是一个全局队列, 全局队列处理 dispatch_sync Block 加入之前已经出现在队列中的任务,全局队列有并发处理的能力,如果碰到的是同步函数,则还是等待返回值后才能执行后面的,即使是在不同的队列中,不过如果把 dispatch_sync Block添加到当前运行的队列中,就会死锁!
//就是把同步函数任务或者异步函数任务添加到一个队列中,会有不同的执行顺序。
}
标签:
原文地址:http://blog.csdn.net/wxy_ios/article/details/51360385