使用GCD管理/操作线程,内部用线程池管理线程
概念:
任务:就是要执行的操作
队列:用来存放任务
处理流程,
1、创建任务
2、把任务放到队列里。
3、GCD自动从队列里取出任务,放到对应的线程中执行,取出原则FIFO。
同步方法
dispatch_sync(dispatch_queue_t queue, ^(void)block)
异步方法
dispatch_async(dispatch_queue_t queue, ^(void)block)
例子:
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_block_t task = ^{
NSLog(@"hello%@", [NSThread currentThread]);
};
dispatch_async(queue, task);
开启异步执行,下载网络图片
dispatch_async(dispatch_get_global_queue(0,0),^{
NSURL*url=[NSLRL URLWithstring:@""];
NSData *data = [NSData datawithContentsOfURL:url];
UIImage *img = [UIImage imageWithData:data];
//回到主线程更新UI
dispatch_sync(dispatch_get_main_queue(), ^{
self.imageVieiv.image = img;
[self.imageView sizeToFit];
self.scrollView.contentSize = img.size;
});
});
需要在info.plist里增加请求网络权限
<true/>
</dict>
同步,异步决定了是否开新的线程
同步:在当前线程中执行任务,不开新线程
异步:在新线程中执行任务,可以开新线程
并发/串行
并发:多个任务并发执行
串行:一个任务执行完毕,再执行下一个任务。