본문 바로가기

Swift

이미지 사용 용도에 따른 UIImage 생성자 선택

반응형

생성자 종류

1. Loading and Caching Images

  • init?(named: String, in: Bundle?, compatibleWith: UITraitCollection?)
  • init?(named: String)
  • init(imageLiteralResourceName: String)

2. Creating and Initializing Image Objects

  • init?(contentsOfFile: String)
  • init?(data: Data)
  • init?(data: Data, scale: CGFloat)
  • init(cgImage: CGImage)
  • init(cgImage: CGImage, scale: CGFloat, orientation: UIImage.Orientation)
  • init(ciImage: CIImage, scale: CGFloat, orientation: UIImage.Orientation)

이미지 파일

  • 앱이 이미지를 읽어 들일 때는 파일 시스템을 통해 이미지 파일을 열고 데이터를 읽어야 하므로 I/O가 발생합니다. 이미지 파일을 읽을 때마다 발생하는 I/O는 성능에 큰 영향을 끼칩니다.
  • 그래서 이를 해결하기 위한 방법 중 하나가 캐싱(Caching)입니다.

1번 방식의 생성자 설명

  • 1번 방식으로 생성한 이미지 객체는 한 번 읽어온 이미지를 메모리에 저장해두고 다음 호출부터는 메모리에 저장된 이미지를 가져옵니다.
  • 이렇게 저장된 메모리는 이미지 객체를 다 사용한 후에도 잘 해제되지 않습니다. 자주 쓰는 이미지라면 관계없지만 만약 용량이 크고 일회성 이미지를 이 방식으로 읽어 들이면 메모리 관리가 힘들어 집니다.

2번 방식의 생성자 설명

  • 메모리 할당을 줄이기 위해 2번 방식으로 이미지 객체를 생성하는 것이 좋습니다.
  • 이 방식은 캐싱되지 않습니다.
  • 이미지 데이터를 매번 다시 읽어와야 하므로 앞의 방식보다는 성능이 약간 저하될 수 있겠지만, 자주 호출되는 이미지가 아니라면 이 방식을 사용하는 것이 메모리 관리에 효율적입니다.

결론

  • 일회성 이미지 호출은 Creating and Initializing Image Objects 방식 채택
  • 자주 사용하는 이미지는 Loading and Caching Images 방식 채택

참고

반응형