GCD的基础
1 #pragma mark - 使用GCD 创建一个 串行 队列 2 // 第一种:系统提供的创建串行队列的方法 3 // 在真正的开发中如果需要创建串行队列,比较习惯用这种 4 // dispatch_queue_t queue = dispatch_get_main_queue(); 5 6 #pragma mark - 使用GCD去创建 并行 队列 7 // 第一种:系统的 8 // 参数1:表示优先级(有四个,没有明显区别) 9 // 参数2:系统保留字10 // dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);11 12 #pragma mark - 使用GCD并行队列 创建子线程13 // 参数1:队列名14 // 参数2:block// dispatch_async(queue, ^{15 // NSLog(@"main1 = %@", [NSThread mainThread]);16 // NSLog(@"current1 = %@", [NSThread currentThread]);17 // });18 // dispatch_async(queue, ^{19 // NSLog(@"main2 = %@", [NSThread mainThread]);20 // NSLog(@"current2 = %@", [NSThread currentThread]);21 // });22 // dispatch_async(queue, ^{23 // NSLog(@"main3 = %@", [NSThread mainThread]);24 // NSLog(@"current3 = %@", [NSThread currentThread]);25 // });26 // 。。。。创建N个27 28 #pragma mark - 几秒之后去做每一件事29 // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{30 // NSLog(@"3.0秒的时候");31 // });32 33 #pragma mark - 重复像一个队列中添加多个任务34 // dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);35 // 第一个参数:添加的数量36 // 第二个参数:队列37 // 第三个参数:block38 // dispatch_apply(100, queue, ^(size_t index) {39 // NSLog(@"%ld", index);40 // });41 42 #pragma mark - 分组43 // // 创建一个分组44 // dispatch_group_t group = dispatch_group_create();45 // // 创建一个队列46 // dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);47 // // 创建任务1:48 // dispatch_group_async(group, queue, ^{49 // NSLog(@"i am 1");50 // });51 // // 创建任务2:52 // dispatch_group_async(group, queue, ^{53 // NSLog(@"i am 2");54 // });55 // 。。。。创建N个56 57 // // 用于监听素有的任务执行的情况的 {所以此功能代码必须放在所有任务之后}58 // dispatch_group_notify(group, queue, ^{59 // NSLog(@"i am notify");60 // });61 62 #pragma mark - 并发中的串行 (披着羊皮的狼)63 // // 创建的队列串行64 // // DISPATCH_QUEUE_SERIAL 顺序执行65 // // DISPATCH_QUEUE_CONCURRENT 无序执行66 // dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);67 // dispatch_async(queue, ^{68 // NSLog(@"test 1");69 // });70 // dispatch_async(queue, ^{71 // NSLog(@"test 2");72 // });73 // 。。。。创建N个
代码展示:
1 #import "ViewController.h" 2 3 @interface ViewController () 4 /// 创建一个imageView 5 @property (nonatomic,strong) UIImageView *imgView; 6 /// 创建一个data用于接收数据 7 @property (nonatomic,strong) NSData *imageData; 8 9 @end10 11 @implementation ViewController12 13 - (void)viewDidLoad {14 [super viewDidLoad];15 // Do any additional setup after loading the view, typically from a nib.16 // 把imageView添加到视图上17 self.imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];18 self.imgView.backgroundColor = [UIColor cyanColor];19 [self.view addSubview:self.imgView];20 21 [self dataHandle];22 }23 #pragma mark - 解析数据24 - (void)dataHandle {25 __weak typeof(self) weakSelf = self;26 // 创建子线程 在子线程中请求数据27 dispatch_async(dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT), ^{28 NSURL *url = [NSURL URLWithString:@"http://pic.58pic.com/58pic/13/11/15/83b58PICXf4_1024.jpg"];29 // 接收数据30 weakSelf.imageData = [NSData dataWithContentsOfURL:url];31 // 返回主线程 刷新UI32 dispatch_async(dispatch_get_main_queue(), ^{33 // 传值34 weakSelf.imgView.image = [UIImage imageWithData:self.imageData];35 });36 });37 38 }39 40 @end