介绍一下开发中遇到多个任务的情况及处理方法。
1. 有两个加载图片的任务,全部加载完成后在进行相应操作,耗时操作不应该放在主线程,所以开启子线程加载,通过队列组实现:
{
// 创建队列组
dispatch_group_t group = dispatch_group_create();
// 创建并发队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 开子线程,任务1
dispatch_group_async(group, queue, ^{
[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://img-blog.csdn.net/20180421152137506"]];
NSLog(@"任务1 完成,线程:%@", [NSThread currentThread]);
});
// 开子线程,任务2
dispatch_group_async(group, queue, ^{
[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://img-blog.csdn.net/20170112145924755?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVyb193cWI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"]];
NSLog(@"任务2 完成,线程:%@", [NSThread currentThread]);
});
// 全部完成
dispatch_group_notify(group, queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"全部完成,线程:%@", [NSThread currentThread]);
});
});
}
输出结果:
2018-05-10 19:42:16.704148+0800 AsyTaskTest[5963:308229] 任务1 完成,线程:<NSThread: 0x604000263380>{number = 3, name = (null)}
2018-05-10 19:42:16.725395+0800 AsyTaskTest[5963:308228] 任务2 完成,线程:<NSThread: 0x60400007c4c0>{number = 4, name = (null)}
2018-05-10 19:42:16.725829+0800 AsyTaskTest[5963:308103] 全部完成,线程:<NSThread: 0x604000070600>{number = 1, name = main}
2. 通过NSOperation实现1中的需求,并添加依赖关系:
{
// 创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 任务1
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
[NSData dataWithContentsOfURL:[NSURL URLWithString:@"