![]()
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