GCD之全局、主线程

 

-(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.按钮执行方法顺序如下:

- (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    
//4.DISPATCH_QUEUE_PRIORITY_BACKGROUND
    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、付费专栏及课程。

余额充值