一.GCD(Grand Central Dispatch)
1.GCD提供分派队列dispatch queue,管理并分派任务,先进先出,先执行
2.队列分为3种类型
(1)主队列
任务执行的线程:主线程
分派任务的方式:串型队列(每个任务必须等待前一个任务执行过后 才可以执行)
(2)全局队列
任务执行的线程:子线程
分派任务的方式:并行队列(每个任务按顺序排发,但不需要等待前一个任务完成)
(3)自定义队列(自己创建)
任务执行的线程:子线程
分派任务的方式:串行和并行
以下是全局队列:
//获取全局队列,添加任务.这个任务有全局队列创建子线程,开启执行
dispatch_queue_t globalQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//异步连接方法
dispatch_async(globalQueue, ^{
//这个block在执行是,是在子线程中
//建立同步连接获取图片
NSLog(@"%d",[NSThread isMainThread]);
NSString * string = @"http://b.zol-img.com.cn/desk/bizhi/image/4/1024x768/1384831595796.jpg";
NSURL * url = [NSURL URLWithString:string];
//建立同步连接现在图片
NSData * data = [NSData dataWithContentsOfURL:url];
//图像获取成功后将图片显示在UI上,(这个任务必须在主线程中完成)
//找主队列(添加任务)
dispatch_async(dispatch_get_main_queue(), ^{
UIImage * image = [UIImage imageWithData:data];
_iamge.image = image;
NSLog(@"%d",[NSThread isMainThread]);
});
});
以下是自定义队列:
//创建queue,设置为并行模式
dispatch_queue_t myConcurrentQueue = dispatch_queue_create("com.lanou.GCD.myConcurrentQueue", DISPATCH_QUEUE_CONCURRENT);
//添加任务
dispatch_async(myConcurrentQueue, ^{
//这个block在执行是,是在子线程中
//建立同步连接获取图片
NSLog(@"%d",[NSThread isMainThread]);
NSString * string = @"http://b.zol-img.com.cn/desk/bizhi/image/4/1024x768/1384831595796.jpg";
NSURL * url = [NSURL URLWithString:string];
//建立同步连接现在图片
NSData * data = [NSData dataWithContentsOfURL:url];
//图像获取成功后将图片显示在UI上,(这个任务必须在主线程中完成)
//找主队列(添加任务)
dispatch_async(dispatch_get_main_queue(), ^{
UIImage * image = [UIImage imageWithData:data];
_iamge.image = image;
NSLog(@"%d",[NSThread isMainThread]);
});
});
dispatch_release(myConcurrentQueue);