iOS开发——从网络请求照片的两种方法

在软件开发中,从网络获取照片是必不可少的。下面两种方法都可以从网络获取照片:
(首先说明一下,由于iOS9中新增App Transport Security(简称ATS)特性,简单说就是原来请求用的HTTP要换成HTTPS,目的是更安全。但是我们请求的时候很可能用到http,直接请求http的话,控制台会打印一条消息:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

意思大概就是http不能用啦。
那我们就把它ATS这个新要求停掉:在Xcode的info.plist文件中添加一条Dictionary类型的App Transport Security,再给它添加一个布尔型的子节点Allow Aritrary Loads,并将这个子节点布尔值设为 YES,就可以了)


iOS开发——从网络请求照片的两种方法_第1张图片
1019712-222ec0e739d1e3d3.png

下面正式介绍方法:
一:首选的当然是Xcode自带,代码超简单:
//首先得拿到照片的路径,也就是下边的string参数,转换为NSData型。

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:string]];
//然后就是添加照片语句,这次不是`imageWithName`了,是 imageWithData。 
UIImageView.image = [UIImage imageWithData:data];
```
是不是超级简单?但是具体使用了几次发现系统这种方法在照片多的时候特别的卡,因为它每次都要请求照片,建议使用第二种,看下面。
二:用第三方库请求。
源代码在GitHub上,网址https://github.com/rs/SDWebImage
,下载下来后把其中的SDWebImage文件夹中.h和.m头文件导入你的工程,比较多,不过全导入功能应该会比较完善。然后在你需要使用照片的类头文件中导入import "UIImageView+WebCache.h
和一份协议SDWebImageManagerDelegate
。OK,导入完成,现在开始使用:
```
//生成图片链接
NSURL *picURL = [NSURL URLWithString:string];
//从网络获取照片,如果没有就用系统自带占位照片
[UIImageView sd_setImageWithURL:picURL];
//下面这个方法多了个参数 placeholderImage,意思是如果没有从网络请求到数据,用使用我们预先设置的这张照片。
[UIImageView sd_setImageWithURL:picURL placeholderImage:[UIImage imageNamed:@"picholder.png"]];
```
上面说了系统的方法虽然代码简单,理解起来较容易,但它内部走的方法其实不少,最最主要的问题是用起来特别的卡,建议大家使用第三方类,这个第三方类每次加载前都会先从本地查找有没有缓存的照片,有的话直接调用,没有的话才会去请求,总体来看就是省资源,加载速度快。个人比较推荐。

你可能感兴趣的:(iOS开发——从网络请求照片的两种方法)