GCD之全局、主线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-( NSString  *)fetchData
{
     [ NSThread  sleepForTimeInterval:1];
     return  @ "Hello world" ;
}
-( NSString  *)firstCast:( NSString  *)data
{
     [ NSThread  sleepForTimeInterval:2];
     return  [data uppercaseString];
}
-( NSString  *)secondCast:( NSString  *)data
{
     [ NSThread  sleepForTimeInterval:3];
     return  [data stringByReplacingOccurrencesOfString:@ "0"  withString:@ "o" ];
}
-( NSInteger )thrid:( NSString  *)data
{
     [ NSThread  sleepForTimeInterval:4];
     return  [data length];
     
}

 1.在View中放置一个UIButton按钮和一个UITextView,在按钮点击事件中调用上面的方法

 2.按钮执行方法顺序如下:

1
2
3
4
5
6
7
8
- ( IBAction )btnclick:( id )sender {
     //__block  声明变量可在block中修改 否则只有只读权限
     __block  int  a=10;
     NSDate  *startTiem=[ NSDate  date];
     //对于全局队列(并行队列) 声明时第一个参数有三种:四种对应的是不同的全局队列 第二个参数目前未使用 始终为0
     //1.DISPATCH_QUEUE_PRIORITY_DEFAULT
     //2.DISPATCH_QUEUE_PRIORITY_HIGH
     //3.DISPATCH_QUEUE_PRIORITY_LOW    <br>    //4.DISPATCH_QUEUE_PRIORITY_BACKGROUND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
     //dispatch_async 开启异步线程
     dispatch_async(queue, ^{
        NSString  *fetchstring= [ self  fetchData];
        NSString  *firststring=[ self  firstCast:fetchstring];
        NSString  *secondstring=[ self  secondCast:firststring];
        NSInteger  length =[ self  thrid:fetchstring];
        NSDate  *endtime=[ NSDate  date];
        //对于UI的更新获取值都在主线程中 此时要用主线程来更新 主 线程是串行队列
         dispatch_async(dispatch_get_main_queue(), ^{
             self .textview.text=secondstring;
         });
         a=9; //若未在声明变量时使用__block 时将会报错不能编译
        NSLog (@ "%@" ,[ NSString  stringWithFormat:@ "%ld  %@" ,length,secondstring]);
        NSLog (@ "%f" ,[endtime timeIntervalSinceDate:startTiem]);
     });
}

 3.输出结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值