/**
* 同步任务 ------ 主队列
*/
- (void)syncFunctMainQueue {
NSLog(@"%@ -- 开始",[NSThread currentThread]);
// 获取主队列
dispatch_queue_t tMainQueue = dispatch_get_main_queue();
// 创建同步任务
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task1",[NSThread currentThread]);
});
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task2",[NSThread currentThread]);
});
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task3",[NSThread currentThread]);
});
NSLog(@"%@ -- 结束 ",[NSThread currentThread]);
}
输出:
结论:在主线程同步使用主队列会造成任务死锁,因为创建的任务被添加到队列
尾,而在主线程中同步创建任务中需要等待新建任务执行完毕后继续执行
后面的代码,因此造成死锁。
/**
* 异步任务 ------ 主队列
*/
- (void)asyncFunctMainQueue {
NSLog(@"%@ -- 开始",[NSThread currentThread]);
// 获取主队列
dispatch_queue_t tMainQueue = dispatch_get_main_queue();
// 创建异步任务
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task1",[NSThread currentThread]);
});
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task2",[NSThread currentThread]);
});
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task3",[NSThread currentThread]);
});
NSLog(@"%@ -- 结束 ",[NSThread currentThread]);
}
/**
* 同步任务 ------ 主队列
*/
- (void)syncFunctMainQueue {
NSLog(@"%@ -- 开始",[NSThread currentThread]);
// 获取主队列
dispatch_queue_t tMainQueue = dispatch_get_main_queue();
// 创建同步任务
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task1",[NSThread currentThread]);
});
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task2",[NSThread currentThread]);
});
dispatch_sync(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- sync task3",[NSThread currentThread]);
});
NSLog(@"%@ -- 结束 ",[NSThread currentThread]);
}
/**
* 异步任务 ------ 主队列
*/
- (void)asyncFunctMainQueue {
NSLog(@"%@ -- 开始",[NSThread currentThread]);
// 获取主队列
dispatch_queue_t tMainQueue = dispatch_get_main_queue();
// 创建异步任务
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task1",[NSThread currentThread]);
});
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task2",[NSThread currentThread]);
});
dispatch_async(tMainQueue, ^{
NSLog(@"%@ tMainQueue -- async task3",[NSThread currentThread]);
});
NSLog(@"%@ -- 结束 ",[NSThread currentThread]);
}
// 触摸后开始下载图片,并显示
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 下载图片到本地,下载费时间后台开启线程进行下载
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self downLoadPicFromNet];
});
}
- (void)downLoadPicFromNet {
// 下载图片资源
NSURL *url = [NSURL URLWithString:@"http://a3.qpic.cn/psb?/76485577-db8b-
4a97-9c1e-e9d919af5bc5/5bQwZ7UhPw9GFhw3RNb*C8FlavddPlGHIrXehxNIHvw!/b/
dB4BAAAAAAAA&ek=1&kp=1&pt=0&bo=gAJxBAAAAAAFANQ!&sce=0-12-12&rf=viewer_311"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *pic = [UIImage imageWithData:data];
// 返回主线程,设置图片
dispatch_async(dispatch_get_main_queue(), ^{
[self.imageView setImage:pic];
});
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//执行耗时的操作
。。。。。。。。
dispatch_async(dispatch_get_main_queue(), ^{
// 回到主线程执行UI刷新
。。。。。
});
});