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