zoukankan      html  css  js  c++  java
  • 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.输出结果

  • 相关阅读:
    Leetcode192. 统计词频
    Leetcode1046. 最后一块石头的重量
    Ubuntu20.04 NS3安装配置
    Ubuntu20.04 中文输入法+截图设置+NetAnim安装
    如何注册谷歌邮箱Gmail
    HDU 2612 Find a way
    友链
    2020沈阳区域赛补题&总结
    XShell中设置便捷的复制粘贴
    Hyper Text 超文本
  • 原文地址:https://www.cnblogs.com/yulei126/p/6783252.html
Copyright © 2011-2022 走看看