Kingfisher를 이용한 이미지 캐싱처리

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) // 이미지를 셋한다.
            }
        }
    }
    
}

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