#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可以進行函數間的嵌套
來達到主線程和子線程間的切換,實現之間的通信。