// // ViewController.m // 07-线程间通信(加载图片,在主线程中更新UI) // // Created by Jasperay on 15/9/3. // Copyright (c) 2015年 @aLonelyRoot3. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIButton *button; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } // 加载网络图片的方法 - (UIImage *)loadImageWithUrl:(NSString *)urlStr { // URL: 同一资源定位符.定位唯一资源 NSURL *url = [NSURL URLWithString:urlStr]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [UIImage imageWithData:data]; return img; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 1.在子线程下载图片 // 首先, 需要开启新的线程, 需要使用异步函数 // 然后, 并发任务都可以放在全局并发队列, 而UI操作放在主队列 // 因此可以使用(异步函数 + 全局并发队列) 内部嵌套 一个(异步函数 + 主队列)的形式-----常用 dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *urlStr = @"http://img1a.xgo-img.com.cn/pics/1538/a1537491.jpg"; UIImage *img = [self loadImageWithUrl:urlStr]; // 2.在主线程更新UI // 此时回到主线程,更新UI(给button设置背景图) dispatch_async(dispatch_get_main_queue(), ^{ [self.button setBackgroundImage:img forState:UIControlStateNormal]; }); }); } @end
时间: 2024-10-11 16:20:07