#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可以进行函数间的嵌套
来达到主线程和子线程间的切换,实现之间的通信。