今天來幫之前寫的ImageView extension加上cache機制
不然每次滑動畫面圖片就不斷閃動
看起來超不舒服而且一直從Firebase下載圖片超浪費效能
先看code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import UIKit
let imageCache = NSCache<AnyObject, AnyObject>()
extension UIImageView { func loadImageUsingCashWithUrlString(urlString: String) { if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage { self.image = cachedImage return } let url = URL(string: urlString) URLSession.shared.dataTask(with: url!) { (data, response, error) in if error != nil { print(error!) return } DispatchQueue.main.async { if let downloadedImage = UIImage(data: data!) { imageCache.setObject(downloadedImage, forKey: urlString as AnyObject) self.image = UIImage(data: data!) } } }.resume() } }
|
呼叫這function時會先去看cache裡面有沒有存過
不然就用拿到的urlString去下載
下載完就用urlString當作cache object的key把圖片存起來