GCD应用

 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

 

posted @ 2015-11-23 12:44  杨顺的博客  阅读(369)  评论(0)    收藏  举报