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);
        });
    
  • 相关阅读:
    qt tableview中如何添加右键菜单且不可编辑单元格
    C++typedef struct和struct的区别
    Qt5配置winpCap
    C++虚函数和纯虚函数的用法和区别
    c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
    C++ windows进程间通信
    C++并发多线程(一)
    Maven无法下载2.1.7.js7版本的itext依赖
    PostgreSQL
    SQL
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4780325.html
Copyright © 2011-2022 走看看