zoukankan      html  css  js  c++  java
  • 07-GCD线程间的通讯

    GCD的线程间的通讯


    • 刷新UI必须在主队列中刷新
    • 如果在子队列中刷新可能会不显示刷新结果
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        NSLog(@"--------");
        // 1.除主队列以外, 随便搞一个队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        
        // 2.调用异步函数
        dispatch_async(queue, ^{
            // 1.下载图片
            NSURL *url = [NSURL URLWithString:@"http://pic.4j4j.cn/upload/pic/20130531/07ed5ea485.jpg"];
            NSData *data = [NSData dataWithContentsOfURL:url];
            // 2.将二进制转换为图片
            UIImage *image = [UIImage imageWithData:data];
            
            // 3.回到主线程更新UI
    //        self.imageView.image = image;
            /*
             技巧:
             如果想等UI更新完毕再执行后面的代码`设置图片完毕`, 那么使用同步函数
             如果不想等UI更新完毕就需要执行后面的代码`设置图片完毕`, 那么使用异步函数
             */
            dispatch_sync(dispatch_get_main_queue(), ^{
                self.imageView.image = image;
            });
            NSLog(@"设置图片完毕 %@", image);
        });
    }
    
    
    

    小技巧

    在解决死锁的时候 / 异步并发中调用主队列(调用方式的选择:同步/异步)
    • 如果想等UI更新完毕再执行后面的代码设置图片完毕, 那么使用同步函数
    • 如果不想等UI更新完毕就需要执行后面的代码设置图片完毕, 那么使用异步函数
    // 1.除主队列以外, 随便搞一个队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        
    // 2.调用异步函数
        dispatch_async(queue, ^{
            // 1.下载图片
            NSURL *url = [NSURL URLWithString:@"http://pic.4j4j.cn/upload/pic/20130531/07ed5ea485.jpg"];
            NSData *data = [NSData dataWithContentsOfURL:url];
            // 2.将二进制转换为图片
            UIImage *image = [UIImage imageWithData:data];
    
            /*
             技巧:
             如果想等UI更新完毕再执行后面的代码`设置图片完毕`, 那么使用同步函数
             如果不想等UI更新完毕就需要执行后面的代码`设置图片完毕`, 那么使用异步函数
             */
            dispatch_sync(dispatch_get_main_queue(), ^{
                self.imageView.image = image;
            });
            NSLog(@"设置图片完毕 %@", image);
        });
    
  • 相关阅读:
    java-selenium三种等待方式
    java-selenium八种元素定位方式
    java-selenium浏览器常用操作命令
    ELK日志分析平台搭建全过程
    详解Oracle架构、原理、进程
    Oracle建立约束、删除约束
    OGG基础知识整理
    由浅入深解读Redis高级能力及性能调优
    《收获,不止Oracle》读书笔记
    转:一条sql语句在mysql中是如何执行的
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4780325.html
Copyright © 2011-2022 走看看