1. 第一种方式: 通过 NSThread
// 1. 创建子线程
// [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil];
-(void)download
{
// 2. 获取NSURL
NSURL *url = [NSURLURLWithString:@"http://pic1.ooopic.com/uploadfilepic/sheji/2010-01-13/OOOPIC_1982zpwang407_20100113f68118f451f282f4.jpg"];
// 3. 下载图片,返回二进制数据
NSData *data = [NSDatadataWithContentsOfURL:url];
// 4. 把二进制数据转换为图片
UIImage *image = [UIImageimageWithData:data];
// 5. 显示图片,刷新UI线程
[self.imgViewperformSelector:@selector(setImage:)onThread:[NSThreadmainThread] withObject:imagewaitUntilDone:YES];
//6. 在 info.plist中添加
// http://www.apple.com/DTDs/PropertyList-1.0.dtd">
//
//
//
//
//
//
// xcode 7.0 以后不支持http请求,只支持 https,所以需要添加这个
}
2. 第二种方式: 通过 dispatch_queue_t
//1.开子线程下载图片
//创建队列(并发)
dispatch_queue_t queue =dispatch_get_global_queue(0,0);
//异步函数
dispatch_async(queue, ^{
//1.获取url地址
NSURL *url = [NSURLURLWithString:@"http://img.redocn.com/sheji/20170824/zhongqiuguoqingchuangyidaqixuanchuancuxiaohaibao_8608767.jpg"];
//2.下载图片
NSData *data = [NSDatadataWithContentsOfURL:url];
//3.把二进制数据转换成图片
UIImage *image = [UIImageimageWithData:data];
NSLog(@"----%@",[NSThreadcurrentThread]);
// 返回 UI线程
dispatch_sync(dispatch_get_main_queue(), ^{
self.imgView.image = image;
NSLog(@"+++%@",[NSThreadcurrentThread]);
});
});
----- 使用 nsoperate的 方式实现图片下载:
//1.创建队列
NSOperationQueue *queue= [[NSOperationQueue alloc]init];
//2.下载图片
[queue addOperationWithBlock:^{
//2.1.确定要下载网络图片的url地址,一个url唯一对应着网络上的一个资源
NSURL *url = [NSURL URLWithString:@"http://pic1.ooopic.com/uploadfilepic/sheji/2010-01-13/OOOPIC_1982zpwang407_20100113f68118f451f282f4.jpg"];
//2.2.根据url地址下载图片数据到本地(二进制数据)
NSData *data = [NSData dataWithContentsOfURL:url];
//2.3.把下载到本地的二进制数据转换成图片
UIImage *image = [UIImage imageWithData:data];
//3.回到主线程刷新UI
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.imgView.image = image;
NSLog(@"%@----",[NSThread currentThread]);
}];
}];