여러개의 이미지로 구성된 뷰를 개발하다가 보니 메모리를 많이 사용하는 문제를 발견했다.
조금 찾아보니 해당 문제는 이미지의 크기와 많은 색상레벨로 인해 발생한다고한다.
해결법으로서는 이미지를 다운샘플링을 하여 보여주는 방식으로하면 메모리를 덜 사용한다.
우선 일반전인 이미지 로드 방식을 사용했을때의 메모리 사용량이다.
단순하게 사진 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)