1 - (void)gcdTest1 {
2
3
4
5 //1.GCD应用 单例模式
6
7
8
9 static dispatch_once_t onceToken;
10
11 dispatch_once(&onceToken, ^{
12
13
14
15 NSLog(@"执行一次%@",[NSThread currentThread]);
16
17 });
18
19 }
1 - (void)gcdTest2 {
2
3
4
5 //延迟操作
6
7 //1、
8
9 NSLog(@"开始执行");
10
11
12
13 // [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];
14
15
16
17 //2、
18
19
20
21 //DISPATCH_TIME_NOW 从现在开始
22
23 //delayInSeconds 延迟几秒
24
25
26
27 dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
28
29
30
31 // when dispatch_time_t
32
33
34
35 dispatch_after(time, dispatch_get_main_queue(), ^{
36
37
38
39 NSLog(@"%@",[NSThread currentThread]);
40
41
42
43 });
44
45
46
47 }
- (void)gcdTest2 {
//延迟操作
//1、
NSLog(@"开始执行");
// [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];
//2、
//DISPATCH_TIME_NOW 从现在开始
//delayInSeconds 延迟几秒
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
// when dispatch_time_t
dispatch_after(time, dispatch_get_main_queue(), ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
1 - (void)gcdTest3 {
2
3
4
5 //创建调度组
6
7 dispatch_group_t group = dispatch_group_create();
8
9 //获取全局队列
10
11 dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
12
13 //调度组的异步请求
14
15 dispatch_group_async(group, queue, ^{
16
17
18
19 [NSThread sleepForTimeInterval:2];
20
21 NSLog(@"下载第一张图");
22
23 });
24
25 dispatch_group_async(group, queue, ^{
26
27 [NSThread sleepForTimeInterval:3];
28
29
30
31 NSLog(@"下载第二张图");
32
33 });
34
35 dispatch_group_async(group, queue, ^{
36
37 [NSThread sleepForTimeInterval:1];
38
39
40
41 NSLog(@"下载第三张图");
42
43 });
44
45 dispatch_group_async(group, queue, ^{
46
47 [NSThread sleepForTimeInterval:5];
48
49
50
51 NSLog(@"下载第四张图");
52
53 });
54
55 //notify通知,当所有异步请求完成时调用dispatch_group_notify
56
57 dispatch_group_notify(group, queue, ^{
58
59 NSLog(@"更新UI");
60
61 });
62
63
64
65 }
1 //队列调度的第二种方法
2
3 - (void)gcdTest4 {
4
5
6
7 //创建调度组
8
9 dispatch_group_t group = dispatch_group_create();
10
11 //获取全局队列
12
13 dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
14
15
16
17 //进入队列
18
19 dispatch_group_enter(group);
20
21 dispatch_async(queue, ^{
22
23
24
25 [NSThread sleepForTimeInterval:2];
26
27 NSLog(@"下载第一张图");
28
29
30
31 //离开队列
32
33 dispatch_group_leave(group);
34
35 });
36
37
38
39 dispatch_group_enter(group);
40
41 dispatch_async(queue, ^{
42
43
44
45 [NSThread sleepForTimeInterval:1];
46
47 NSLog(@"下载第er张图");
48
49
50
51 dispatch_group_leave(group);
52
53 });
54
55
56
57 dispatch_group_enter(group);
58
59 dispatch_async(queue, ^{
60
61
62
63 [NSThread sleepForTimeInterval:3];
64
65 NSLog(@"下载第san张图");
66
67
68
69 dispatch_group_leave(group);
70
71 });
72
73
74
75 //等待调度队列wait相当于一个阻塞状态
76
77 dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
78
79
80
81 NSLog(@"更新UI");
82
83
84
85 }
1 //中断操作
2
3
4
5 - (void)gcdTest5 {
6
7
8
9 //dispatch_barrier_async一定是自定义队列
10
11 //这里指定的并发队列应该是自己通过dispatch_queue_create函数创建的。如果你传的是一个串行队列或者全局并发队列,这个函数等同于dispatch_async函数。
12
13
14
15 dispatch_queue_t queue = dispatch_queue_create("com.bjsxt", DISPATCH_QUEUE_CONCURRENT); //dispatch_get_global_queue(0, 0);
16
17
18
19 dispatch_async(queue, ^{
20
21 [NSThread sleepForTimeInterval:1];
22
23 NSLog(@"1");
24
25 });
26
27
28
29 dispatch_async(queue, ^{
30
31 [NSThread sleepForTimeInterval:3];
32
33
34
35 NSLog(@"2");
36
37 });
38
39 dispatch_async(queue, ^{
40
41
42
43 [NSThread sleepForTimeInterval:2];
44
45
46
47 NSLog(@"3");
48
49 });
50
51
52
53 //中断操作dispatch_barrier_async
54
55 dispatch_barrier_async(queue, ^{
56
57 NSLog(@"--------");
58
59 [NSThread sleepForTimeInterval:1];
60
61
62
63 });
64
65
66
67 dispatch_async(queue, ^{
68
69
70
71 [NSThread sleepForTimeInterval:1];
72
73 NSLog(@"4");
74
75 });
76
77 dispatch_async(queue, ^{
78
79 NSLog(@"5");
80
81 });
82
83 }
1 - (void)gcdTest6 {
2
3
4
5 //遍历操作
6
7 dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
8
9 //iterations 遍历的次数
10
11 dispatch_apply(5, queue, ^(size_t i) {
12
13 NSLog(@"%@",@(i));
14
15 });
16
17 }