[SwiftUI] Image 메모리 문제

조영훈·2022년 9월 10일

여러개의 이미지로 구성된 뷰를 개발하다가 보니 메모리를 많이 사용하는 문제를 발견했다.
조금 찾아보니 해당 문제는 이미지의 크기와 많은 색상레벨로 인해 발생한다고한다.
해결법으로서는 이미지를 다운샘플링을 하여 보여주는 방식으로하면 메모리를 덜 사용한다.

우선 일반전인 이미지 로드 방식을 사용했을때의 메모리 사용량이다.
단순하게 사진 9장을 로드했는데에도 불구하고 약 300mb를 사용하였다.

여기에 다운 샘플링을 적용하였을때의 메모리 사용량이다.
확연하게 줄어듯것을 볼 수 있다.

코드

전체적인 개념은 이미지를 핸드폰 화면에 맞추어서 resize를 하는 방식이다.

public extension UIImage {
    
    /// Resizes the image by keeping the aspect ratio
    func resize(width: CGFloat) -> UIImage {
        let scale = width / self.size.width
        let height = self.size.height * scale
//        let width = self.size.width * scale
        let newSize = CGSize(width: width, height: height)
        let renderer = UIGraphicsImageRenderer(size: newSize)
        
        return renderer.image { _ in
            self.draw(in: CGRect(origin: .zero, size: newSize))
        }
    }
}
let image = UIImage(data: item.image!.data!)!
            .resize(width: width)
return Image(uiImage: image)

출처

출처

0개의 댓글