우선 간단히 이미지를 여러 개 보여주는 테이블 뷰를 구현했다.
아주 간단한 뷰라서 문제 없겠거니 넘어갔는데...
해당 뷰만 들어오면 메모리가 아주 상당하게 올라가는 문제가 발생했다.
위 사진 처럼 4배 가까이 메모리가 커지는 문제가 발생됐다.
처음에는 테이블 뷰 delegate 문제인가.. 클로저 캡쳐 문제인가.. 봤는데
아주 간단한 테이블 뷰여서 문제가 발생할만한 부분이 있지 않았다.
cellForLowAt에 이미지 지정하는 부분
을 주석 처리했더니 메모리가 올라가지 않았다.
시간을 더 투자해서 알아보니 해당 뷰의 이미지들만 용량이 매우 큰 것
으로 확인했다.
그래서 이미지의 용량을 줄이기 위해 resize
을 하도록했다.
extension UIImage {
func resize(to size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
defer { UIGraphicsEndImageContext() }
draw(in: CGRect(origin: .zero, size: size))
return UIGraphicsGetImageFromCurrentImageContext() ?? self
}
}
그랬더니 완벽하게 해결..!
메모리 릭 원인을 모를 때 꼭 이미지 용량을 한 번 확인해보시길 바랍니다. !!