【Swift4】画像のキャッシュにPINCacheを使ってみた

研究
この記事は約3分で読めます。

そもそも、PINCacheって?

親ライブラリはこちら、PINRemoteImage。
Pinterestで利用されている画像ローダー。

Dark Mode

PINCache (this link opens in a new window) by pinterest (this link opens in a new window)

Fast, non-deadlocking parallel object cache for iOS, tvOS and OS X

そのうち、キャッシュにまつわるライブラリはこちら。

Swiftの有名画像キャッシュライブラリを比較してみた – Qiita

Alamofire他の画像ライブラリとの比較はこちら。
今回、上司命令でこれを使うことになったので使い方を備忘録がてら。

podをインストールしたら、まず

import PINRemoteImage
import PINCache

順序としては逆と思うかもしれませんが、先に表示箇所へ反映してやりたいので
viewDidLoad()らへんで既存のキャッシュを見に行きます。

PINCache.shared().object(forKey: "(画像キー)") { (cache, key, object) in
	if var image = object as? UIImage {
		self.profile_image = image
	}
}

画像のキーは他のものと被らない一意に設定できるものを使います。
何かしらのテーブルから取ってきてるんではないかと思うので、
引用元のテーブル+連番でいいんじゃないでしょうか。

一方今回キャッシュが無かったら、新規にデータを取ってきて格納します。

if (self.profile_image != nil){
  testSection.profilePictureButton.setImage(self.profile_image, for: UIControl.State.normal)
}else{
  let storage = Storage.storage().reference().child("データベースから取ってきた画像の参照先")
  storage.getData(maxSize: 1 * 1024 * 1024) { data, error in
    if let error = error {
    } else {
      let image = UIImage(data: data!)!
      profilePictureButton.setImage(image, for: UIControl.State.normal)
      PINCache.shared().setObject(image, forKey: "(画像キー)")
    }
  }
}

firebase strageから取ってくるのは前回同様。
これでキャッシュされている限り画像がサクサク表示されます。

あとは本当はPreloadができるといいなぁ、とか…

コメント

タイトルとURLをコピーしました