반응형
생성자 종류
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 방식 채택
참고
반응형
'Swift' 카테고리의 다른 글
Swift 코드 작성시 변수와 함수 순서 (0) | 2018.11.04 |
---|---|
프로토타입 셀 제어 (0) | 2018.11.04 |
Status Bar 색상 지정 (0) | 2018.11.04 |
@IBAction, 뷰끼리 값전달, 델리게이트, 최초 응답자 간단한 정보 (0) | 2018.11.04 |
*.pbxproj 삭제 했을 때 대처하는 방법 (0) | 2018.11.03 |