[SwiftUI] Image 메모리 문제

조영훈·2022년 9월 10일
0

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

우선 일반전인 이미지 로드 방식을 사용했을때의 메모리 사용량이다.
단순하게 사진 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개의 댓글