多线程(3) - ios关于线程调度的三种方式之GCD
一, 队列的选择技巧
1,串行队列异步执行:开一条线程,顺序执行,效率不高,执行比较慢,资源占用小,省电。使用场合:一般网络是3g,对性能要求不高,
2,并发队列异步执行:开启多条线程,并发执行,效率高,消耗资源大,费电。使用场合:网络是WiFi,要求用户体验非常流畅。对任务的顺序没有要求。
3,同步任务的使用场合:一般只会在并发队列,需要阻塞后续的任务,必须等待同步任务执行完毕,然后再去执行。
二,GCD常见的应用拓展
1, 队列之间的通信:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL * url = [NSURL URLWithString:@""];
NSData * data = [NSData dataWithContentsOfURL:url];
UIImage * image = [UIImage imageWithData:data];;
dispatch_async(dispatch_get_main_queue(), ^{
self.image.image = image;
});
});
2,延时操作:dispatch_after(延时多久,队列,操作)
3, 调度分组:应用场景,开发的时候有时候出现多个网络请求,都完成以后,在给用户一个通知,或者说刷新UI。但因为每个网络请求的执行时间不一定,这时候就可以使用调度调度分组了。
调度组可以跨队列通信。