GCD全称为Grand Central Dispatch,是纯C语言的,提供了很多函数。
GCD的介绍
GCD是苹果公司为多核的并行运算提出的解决的方案
GCD会自动利用更多的CPU内核,比如双核,四核。
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
GCD的所有的API都在libdispatch.dylib这个动态库中,XCode会自动的导入
GCD的主头文件是#import <dispatch/dispatch.h>
程序员要做的就是告诉GCD要执行什么任务,不需要编写任何线程管理的代码。
GCD有两个核心
一个是任务一个是队列。任务就是执行什么操作,队列就是用来存放任务的。
GCD使用的两个步骤
创建任务:确定要做的事情
将任务添加到队列中,GCD会自动将队列中的任务取出来,放到对应的线程中执行,任务的取出遵循队列的FIFO原则也就是先进先出,后进后出。
GCD异步下载网络图片,我们看不到线程也不会多去写函数了会很方便
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic ,strong)UIScrollView * scrollView;
@property (nonatomic ,strong)UIImageView * imageView;
@end
@implementation ViewController
-(void)loadView
{
self.scrollView=[[UIScrollView alloc]init];
self.imageView=[[UIImageView alloc]init];
self.view=self.scrollView;
[self.scrollView addSubview:self.imageView];
}
- (void)viewDidLoad {
[super viewDidLoad];
//开启异步执行,下载网络图片
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL * url=[NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1502267808635&di=40
d2848bd388e1551749d652ab3a1438&imgtype=0&src=http%3A%2F%2Fabc.2008php.com%2F2013_Website_appreciate%2F2013-07-22%2F201307221
75804.jpg"];
NSData * data=[NSData dataWithContentsOfURL:url];
UIImage * image=[UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image=image;
//让imageview和图片一样大小
[self.imageView sizeToFit];
self.scrollView.contentSize=image.size;
NSLog(@"%@",[NSThread currentThread]);
});
});
}
GCD中创建的线程执行完任务之后不会立刻销毁,而是会现放到线程池中呆较短的时间,如果还是没有任务,再去销毁。