1 // 2 // ViewController.m 3 // GCDdemo 4 // 5 // Created by ys on 15/11/23. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 13 @end 14 15 @implementation ViewController 16 /** 17 18 GCD的任务 19 20 1> disptach_sync 没有创建线程的欲望,就在当前线程执行 21 最主要的目的,阻塞并行队列任务的执行,只有当前的同步任务执行完毕后,后续的任务才能够执行 22 应用场景:用户登录! 23 24 2> dispatch_async 有创建线程的欲望,但是创建多少条线程,取决与队列的类型 25 26 GCD的队列 27 28 1> 串行队列 类似于跑步,只有一条跑道 29 如果存在异步任务,就会在新线程中执行异步任务,而同步任务依旧在当前线程中执行 30 31 2> 并行队列 类似与赛跑,具体跑道的数量,由系统决定 32 */ 33 34 - (void)viewDidLoad 35 { 36 [super viewDidLoad]; 37 38 [self demo]; 39 } 40 41 - (void)demo 42 { 43 dispatch_queue_t q = dispatch_queue_create("demo", DISPATCH_QUEUE_CONCURRENT); 44 45 // 在新线程中工作 46 dispatch_async(q, ^{ 47 // 2 48 NSLog(@"%@", [NSThread currentThread]); 49 50 __block BOOL userLogon = NO; 51 52 // 用户登录,用户输入用户名,密码之后,提交到服务器确认身份 53 // 应用场景1:用来阻塞必须要按照顺序执行的任务 54 dispatch_sync(q, ^{ 55 // 2 56 NSLog(@"用户网络登陆 %@", [NSThread currentThread]); 57 58 [NSThread sleepForTimeInterval:3.0f]; 59 60 userLogon = YES;//or NO 61 }); 62 63 // 身份确认之前,不能做其他事情 64 dispatch_async(q, ^{ 65 // 可能是3,也可能是2 66 // 3.0(对的) / 立马执行(不对的) 67 NSLog(@"后续处理 %@", [NSThread currentThread]); 68 69 if (userLogon) { 70 NSLog(@"welcome"); 71 } else { 72 NSLog(@"why"); 73 } 74 }); 75 76 // 队列是先进先出FIFO的,队列中的任务都是串着的 77 }); 78 } 79 80 81 @end