Swift & iOS

[Swift & iOS] Alamofireimage 이용하여 image cache 작업

jkkooooooo 2021. 9. 15. 23:13
반응형

토이 프로젝트 중에 image를 API를 통해서 가져와 tableView에 뿌려주는 기능을 구현하여 사용하다가
tableViewCell들이 재사용되면서 API 호출 빈도가 많아져 AlamofireImage로 cache 작업을 추가 하기로 하였습니다.

1. AlamofireImage
AlamofireImage는 Alamofire을 위한 image 컴포넌트 라이브러리라고 합니다.
현재 네트워크를 모두 Alamofire로 작업을 하고 있어 선택하게 되었습니다.

2. 설치 방법
먼저 CocoaPods 으로 설치를 해주세요
혹시 CocoaPods 설치방법을 모른다면 참고하세요
https://jkkooooooo.tistory.com/23

pod 'AlamofireImage', '~> 4.1'

설치 후 사용 할 파일에 import AlamofireImage 해줍니다.

3. Cache 작업
AlamofireImage에서는 AutoPurgingImageCache라는 함수가 존재하는데요
이 함수를 통해서 cache작업을 하면 됩니다.
먼저 아래 코드와 같이 함수 선언을 해줍니다.

let imageCache = AutoPurgingImageCache( memoryCapacity: 100_000_000, preferredMemoryUsageAfterPurge: 60_000_000 )

설정한 메모리 용량 만큼 저장이 가능 하고 용량이 꽉차게 되면 캐시 데이터를 마지막에 접근 한 날짜별로 정렬한 다음 가장 오래된 이미지를
삭제를 하는데 preferredMemoryUsageAfterPurge 설정 값에 도달 할 때 까지 삭제를 하게 됩니다. 그래서 cache를 통해서 데이터에접근 할 때 마다 엑세스 날짜를 자동으로 업데이트 합니다.

4. Cache 추가 / 삭제 / 불러오기

기본적으로 캐시에 이미지를 추가할 때는 add(image, identifier)를 사용합니다.
삭제는 remove(identifier) 데이터를 가져올 때는 image(identifier) 이 가장 기본적인 형태입니다.

let imageCache = AutoPurgingImageCache() let avatarImage = UIImage(data: data)! // Add imageCache.add(avatarImage, withIdentifier: "avatar") // Fetch let cachedAvatar = imageCache.image(withIdentifier: "avatar") // Remove imageCache.removeImage(withIdentifier: "avatar")



저 같은 경우 Alamofire를 통해 서버로부터 Image를 가져와 사용하였습니다.
아래 코드와 같이 캐시에 이미지를 저장하여 구현하였습니다.

 // 캐시 저장 Alamofire.request(url).responseImage { response in if response.result.value != nil { let image = UIImage(data: response.data!, scale: 1.0)! imageCache.add(image, withIdentifier: url) } } // 저장된 캐시이용하여 이미지 작업 if let image = imageCache.image(withIdentifier: url) { self.tavleView.image = image }




참고 :
공식 AlamofireImage gitgub
https://github.com/Alamofire/AlamofireImage

반응형