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);
        });
    
  • 相关阅读:
    Delphi 多线程知识
    程序员最后归宿是什么?30或35想转行?
    做技术的最终出路!
    路在何方?分析程序员人生之路
    一个垂直滚动的插件
    jQuery 动画中 缓动效果的应用
    [转]jQuery性能优化指南 I
    jQuery 标记当前函数 开始写一个简单的插件
    我发现我写的这俩函数太好用了~~
    jQuery浏览器版本判断
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4780325.html
Copyright © 2011-2022 走看看