[iOS] 아이폰 메모리 1.7기가씩 써본 후기 (KingFisher)

유인호·2024년 1월 22일
0

iOS

목록 보기
19/64

문제의 발단


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
)

이렇게 처리를 해주니 램 사용량이 적정수준으로 돌아오는걸 볼 수 있었다.


참고할만한 글
[iOS] WWDC 2018 Image and Graphics Best Practice

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글