每当我们加载数据的时候为了让程序更流畅的运行我们就要用到多线程GCD:
<span style="color:#cc33cc;"> //获取全局队列 添加任务 这个任务由全局队列创建子线程 开启执行
//获取全局队列</span>
dispatch_queue_t globleQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(globleQueue, ^{
<span style="color:#cc33cc;"> //建立同步连接 获取图片数据
//显示那个线程</span>
NSLog(@"%d",[NSThread isMainThread]);
<span style="color:#cc33cc;"> //建立同步连接获取拓片</span>
NSString * string = @"http://pic13.nipic.com/20110313/2686941_211532129160_2.jpg";
NSURL * url = [NSURL URLWithString:string];
NSData *data = [NSData dataWithContentsOfURL:url];
<span style="color:#cc33cc;"> //图像获取成功 将图像显示在ui上(这个任务必须在主线程完成)
//找主队列 添加任务</span>
dispatch_async(dispatch_get_main_queue(), ^{
UIImage * image = [UIImage imageWithData:data];
_imageView.image = image;
NSLog(@"%d",[NSThread isMainThread]);
});
});
}
我们还可以通过dispatch_group_async()函数一部分派的所有程序块设置为松散的,已尽可能快的执行.
还可以通过dispatch_group_notify()制定一个额外的程序块,让它在组中的所有程序块运行完成时在执行.
<span style="color:#ff0000;"> </span><span style="color:#3366ff;"> dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
//对数据进行操作.
//可以添加分组
dispatch_group_t group = dispatch_group_create();
//线程1
dispatch_group_async(group, queue, ^{
//可以数据操作
});
//线程2
dispatch_group_async(group, queue, ^{
//可以数据操作
});
//指定额外的程序块 在其他完成时在执行
dispatch_group_notify(group, queue, ^{
//等数据处理完在执行相应的操作
});
});</span>