Kingfisher란?

  • Kingfisher 바로가기
  • 순수 스위프트로 만들어진 라이브러리로 이미지를 쉽게 캐싱하고 다운로드 하도록 만들어진 라이브러리다.

기본적인 사용법

  • 직관적이고 간단해서 설명할 필요가 있을지 의문…
  • 이미지 URL만 있으면 알아서 이미지를 세팅해준다.
let url = URL(string: "https://example.com/image.png")
imageView.kf.setImage(with: url)
  • 그리고 이렇게 URL로 이미지를 다운받게 되면, 캐시를 메모리와 디스크에 각각 보내고 나중에 같은 URL를 사용할 경우 캐시를 이용해 즉시 이미지를 보여준다.
  • Kingfisher는 이렇게 자동으로 캐시를 관리하며 캐시 시스템을 관리할 수 있는 API도 제공한다.
  • 캐시 관련 아무것도 지정하지 않으면 ImageCache.default가 기본값이 된다.

캐시 키를 이용한 방법

  • 참고로 UIImageView를 Extension 하여 사용하면 편하다.
  • 캐시의 키는 String 타입의 URL이 된다.
  • 물론 별도의 키를 써도 좋지만 관리하기가 힘들기 때문에 같은 URL을 가지는 이미지에 대해서는 같은 키를 쓰기 쉽게 String 타입의 URL을 키로 쓰자.
extension UIImageView {
    
    func setImage(with urlString: String) {
        let cache = ImageCache.default
        cache.retrieveImage(forKey: urlString, options: nil) { (image, _) in // 캐시에서 키를 통해 이미지를 가져온다.
            if let image = image { // 만약 캐시에 이미지가 존재한다면
                self.image = image // 바로 이미지를 셋한다.
            } else {
                let url = URL(string: urlString) // 캐시가 없다면
                let resource = ImageResource(downloadURL: url, cacheKey: urlString) // URL로부터 이미지를 다운받고 String 타입의 URL을 캐시키로 지정하고
                self.kf.setImage(with: resource) // 이미지를 셋한다.
            }
        }
    }
    
}

기타 캐시를 컨트롤 하는 방법