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);
        });
    
  • 相关阅读:
    Vim配置IDE开发环境
    Win7任务计划自由预设系统定时自动关机
    awk中文手册
    awk简明教程
    Linux之mount命令详解
    VirtualBox内Linux系统与Windows共享文件夹
    堆排序详解
    int main(int argc,char* argv[])参数详解
    GDB调试详解
    VirtualBox中虚拟Ubuntu添加新的虚拟硬盘
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4780325.html
Copyright © 2011-2022 走看看