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    <br>    //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.输出结果

 


相关文章
GCD---从子线程回到主线程(经典用法)
GCD---从子线程回到主线程(经典用法)
149 0
线程函数
 Linux 线程函数 1.线程是进程中的一个活动单元,多个线程共享同一个进程的地址空间,参与操作系统的统一调度 2.使用线程的好处:效率高  3.
594 0
AQS源码探究_06 Conditon条件队列(await方法、线程入队与挂起、signal方法)
AQS源码探究_06 Conditon条件队列(await方法、线程入队与挂起、signal方法)
AQS源码探究_06 Conditon条件队列(await方法、线程入队与挂起、signal方法)
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
1166 1

热门文章

最新文章