GCD间的通信

#import "ViewController.h"

@interface ViewController ()
//声明UIImageView一个对象属性
@property (nonatomic,strong)UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  
    //初始化
    self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 200, 300, 200)];
  //添加到视图显示
    [self.view addSubview:self.imageView];
}

//复写的touchesBegan方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
 //创建一个异步函数+全局并发队列  
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        //图片的网络路径
        NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/h%3D200/sign=6008b360f336afc3110c38658318eb85/a1ec08fa513d26973aa9f6fd51fbb2fb4316d81c.jpg"];
        //加载图片-----是这里面执行时间最长的一段代码,如果写在主线程,会造成短暂的堵塞
        NSData *data = [NSData dataWithContentsOfURL:url];
        //生成图片
        UIImage *image = [UIImage imageWithData:data];
        
        //回到主线程即创建了一个异步函数+主队列
        dispatch_async(dispatch_get_main_queue(), ^{
            self.imageView.image = image;
        });
        
    });
    
  
}

总结

    一切与UI处理相关的代码都要在主线程中执行,其他的在子线程中执行。GCD可以进行函数间的嵌套
来达到主线程和子线程间的切换,实现之间的通信。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容