iOS開發——從網路請求照片的兩種方法

weixin_34185364發表於2016-11-09

在軟體開發中,從網路獲取照片是必不可少的。下面兩種方法都可以從網路獲取照片:
(首先說明一下,由於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,就可以了)


1955077-e51c9ea9e09a5775.png
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"]];
```
上面說了系統的方法雖然程式碼簡單,理解起來較容易,但它內部走的方法其實不少,最最主要的問題是用起來特別的卡,建議大家使用第三方類,這個第三方類每次載入前都會先從本地查詢有沒有快取的照片,有的話直接呼叫,沒有的話才會去請求,總體來看就是省資源,載入速度快。個人比較推薦。

相關文章