API를 통해 받은 사진을 KingFisher를 통해 보여주는데,비정상적으로 램을 너무 많이 사용하고 있는것을 발견함.
당연히 메모리 릭 이라고 생각해서 Profile을 돌려봤는데,,
메모리 릭은 찾을 수가 없었다.. 그리고 단순한 앱이기도 하고 아무리 코드를 봐도 메모리 누수가 날만한 곳을 전혀 찾지 못했다.
여기저기 신세한탄을 하며 이것저것 시도해보는 도중, 어떤 분이 이미지의 Scale을 줄여보라는 아이디어를 주셨고, 또한 더이상 안쓸법한 이미지를 메모리에서 내리는 코드를 추가해보았다.
KingfisherManager.shared.cache.memoryStorage.config.totalCostLimit = 512 * 512 * 100 // 이미지 관련 메모리 제한 걸기
KingfisherManager.shared.cache.clearMemoryCache() // 메모리 캐시 삭제
// 이미지를 low-quality로 가져오기 위한 ImageProcessor 정의
let processor = DownsamplingImageProcessor(size: CGSize(width: 50, height: 50))
|> ResizingImageProcessor(referenceSize: CGSize(width: 50, height: 50), mode: .aspectFill)
// KingfisherOptionsInfo를 사용하여 이미지 프로세싱 옵션 설정
let options: KingfisherOptionsInfo = [
.processor(processor),
.scaleFactor(UIScreen.main.scale),
.transition(.fade(1)),
.cacheOriginalImage
]
imageView.kf.setImage(
with: imageURL,
placeholder: nil,
options: options,
progressBlock: nil,
completionHandler: nil
)
이렇게 처리를 해주니 램 사용량이 적정수준으로 돌아오는걸 볼 수 있었다.