1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 //向主线程添加一个任务 12 //同步添加任务 13 //GCD 主线程 dispatch_get_main_queue() 14 //NSOperationQueue 主线程 [NSOperationQueue mainQueue] 15 // dispatch_sync(dispatch_get_main_queue(), ^{ 16 // NSLog(@"1"); 17 // }); 18 19 //异步添加任务 20 dispatch_async(dispatch_get_main_queue(), ^{ 21 NSLog(@"%@",[NSThread currentThread]); 22 }); 23 24 25 26 } 27 //串行队列 28 - (IBAction)dispatchQueueSerial:(id)sender { 29 //创建串行队列 30 //指针 31 //dispatch_queue_create(字符串指队列的标识,串行或并行) 32 dispatch_queue_t queue = dispatch_queue_create("com.lanou3g.queue1",DISPATCH_QUEUE_SERIAL ); 33 //添加任务 34 dispatch_async(queue, ^{ 35 for ( int i = 0; i <100; i++) { 36 NSLog(@"1,%@",[NSThread currentThread]); 37 } 38 }); 39 dispatch_async(queue, ^{ 40 for (int i = 0; i < 100; i++) { 41 NSLog(@"2,%@",[NSThread currentThread]); 42 } 43 44 }); 45 46 47 48 49 } 50 //全局队列 51 - (IBAction)Dispatch_global_queue:(id)sender { 52 //苹果预置了全局队列,并行队列 53 //dispatch_get_global_queue(队列优先级,占位0) 54 dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 55 //添加任务 56 dispatch_async(global, ^{ 57 NSLog(@"1,%@",[NSThread currentThread]); 58 }); 59 dispatch_async(global, ^{ 60 NSLog(@"2,%@",[NSThread currentThread]); 61 }); 62 63 64 65 } 66 //并行队列和全局队列是一样的 67 - (IBAction)dispatch_queue_concurrent:(id)sender { 68 dispatch_queue_t conQueue = dispatch_queue_create ("com.lanou3g.concurrent1", DISPATCH_QUEUE_CONCURRENT); 69 //添加任务 70 dispatch_async(conQueue, ^{ 71 for (int i = 0; i < 100; i++) { 72 NSLog(@"1,%@",[NSThread currentThread]); 73 74 } 75 }); 76 dispatch_async(conQueue, ^{ 77 for (int i = 0; i < 100; i++) { 78 NSLog(@"2,%@",[NSThread currentThread]); 79 80 } 81 }); 82 } 83 //延时执行 84 - (IBAction)DISPATCH_AFTER:(id)sender { 85 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 86 NSLog(@"延时,%@",[NSThread currentThread]); 87 }); 88 89 90 } 91 //重复执行 92 - (IBAction)ReceiveMemoryWarning:(id)sender { 93 //记得天机size_t的参数 94 size_t count = 10; 95 dispatch_apply(count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^(size_t i) { 96 NSLog(@"执行的次数:%ld",i); 97 }); 98 } 99 //任务添加到队列后,等待其他任务执行后再执行 100 101 - (IBAction)DISPATCH_GROUP_NOTIFY:(id)sender { 102 //把线程队列添加到组中 103 //dispatch_group_async()向组中添加队列 104 //dispatch_group_notify()添加任务,会等待其他任务执行完毕 105 //创建线程组 106 dispatch_group_t group = dispatch_group_create(); 107 dispatch_queue_t conQueue = dispatch_queue_create("com.lanou", DISPATCH_QUEUE_CONCURRENT); 108 //添加任务 109 dispatch_group_async(group, conQueue, ^{ 110 for (int i = 0; i <100; i++) { 111 NSLog(@"1,%@",[NSThread currentThread]); 112 113 } 114 }); 115 dispatch_group_async(group, conQueue, ^{ 116 for (int i = 0; i <100; i++) { 117 NSLog(@"2,%@",[NSThread currentThread]); 118 119 } 120 }); 121 //监听其他任务 122 dispatch_group_notify(group, conQueue, ^{ 123 NSLog(@"等待其他任务执行后,再执行"); 124 }); 125 } 126 //当前barrier线程执行时,其他任务停止 127 - (IBAction)dispatchbarrieradync:(id)sender { 128 dispatch_queue_t conQueue = dispatch_queue_create("com.lanou.conQueue", DISPATCH_QUEUE_CONCURRENT); 129 //添加任务 130 dispatch_async(conQueue, ^{ 131 for (int i = 0; i < 100; i++) { 132 NSLog(@"1,%@",[NSThread currentThread]); 133 } 134 }); 135 dispatch_async(conQueue, ^{ 136 for (int i = 0; i < 100; i++) { 137 NSLog(@"2,%@",[NSThread currentThread]); 138 } 139 }); 140 //添加barrier任务 141 dispatch_barrier_async(conQueue, ^{ 142 for (int i = 0; i < 100; i++) { 143 NSLog(@"barrier,%@",[NSThread currentThread]); 144 } 145 }); 146 dispatch_async(conQueue, ^{ 147 for (int i = 0; i < 100; i++) { 148 NSLog(@"4,%@",[NSThread currentThread]); 149 } 150 }); 151 152 153 } 154 155 // 156 - (IBAction)dispatchAsyncF:(id)sender { 157 158 dispatch_async_f(dispatch_get_main_queue(), nil, myFunction); 159 160 } 161 //定义函数 162 void myFunction(){ 163 for (int i = 0 ; i <100; i++) { 164 NSLog(@"1,%@",[NSThread currentThread]); 165 } 166 } 167 168 - (void)didReceiveMemoryWarning { 169 [super didReceiveMemoryWarning]; 170 // Dispose of any resources that can be recreated. 171 } 172 173 @end