티스토리 뷰
728x90
반응형
내용
- User Defaults 는 NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary 의 인스턴스여야 한다. 만약에 이미지 데이터를 저장하기 위해서는 Data 로 변환을 해주어야 한다.
자, UIImage 를 Data 로 변환해보자.
(Data 는 구조체이고 NSData 는 Data 와 연결되는 클래스다. 그래서 개발자문서에서는 인스턴스의 조건에 NSData 를 쓴것이고 구글링하면 대부분의 문서에서는 Data 로 변환해야한다고 편하게 말하는 듯 하다.)
참고 :
iOS) User Defaults vs Core Data
📌 UIImage 저장하기
// ✅ UIImage convert to NSData
func setUserDefaults(UIImage value: UIImage, _ key: String) {
// ✅ compressionQuality : 압축 퀄리티. 0.0(최대 압축, 최저 화질) ~ 1.0(최저 압축, 최고 화질)
let imageData = value.jpegData(compressionQuality: 1.0)
// ✅ 아래처럼 사용할 수 있다.
// let imageData = UIImage.jpegData(value)
// ✅ UserDefatuls 에 Data 로 저장.
UserDefaults.standard.set(imageData, forKey: key)
}
// ✅ 사용
// setUserDefaults(UIImage: profileImage, "SavedImage")
- UIImage.jpegData 로 사용해도 된다. 사용법의 차이다. 다음에서 볼 수 있듯이 같이 동일한 메서드다.
❓ pngData VS jpegData
메서드를 사용하다보니 UIImage 를 Data 로 변환하는데 두개의 함수가 존재했다.
- PNG 저장
- JPEG 저장
- pngData VS jpegData
용량면에서 PNG 보다 JPEG 가 더 크기가 작다. 더 자세한 내용은 짱짱 zedd 님을 참고해보자.
iOS ) pngData VS jpegData(compressionQuality:)
📌 UIImage 불러오기
if let imageData = UserDefaults.standard.data(forKey: "SavedImage"),
let image = UIImage(data: imageData) {
testImageView.image = image
}
❌ 문제 발생
이미지를 데이터로 변환해서 잘 저장했지만 불러올 때 nil 을 불러왔다. 그리고 다음같이 콘솔에 찍혔다.
용량 문제같았다.(테스트해보기 위해서 고화질 사진을 다른 key 으로 몇개 넣었었다;)
해결
- 용량이 적은 저화질의 사진을 넣었고 성공적으로 가져올 수 있었다. UserDefaults 가 가지는 용량을 초과한 듯 하다.
- clean build 를 해도 성공적으로 가져올 수 있었다. 이 역시 누적된 고화질 사진들의 영향이다.
UserDefaults 용량?
UserDefaults 에도 용량이 존재한다. 무심코 썼는데 대용량 데이터를 쓰지말라는 말이 이건가 싶었다.
다음의 개발자문서에서는 tvOS 에 대해서는 1MB 까지 제공한다고 한다.
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) Face ID & Touch ID - Biometrics Authentication(생체인식 인증) (0) | 2021.09.11 |
---|---|
iOS) UIImage 를 Data 로 변환해서 UserDefaults 에 저장하는 것은 부적합하다? (0) | 2021.09.06 |
iOS) UILabel 부분 글자 크기/폰트/색상/밑줄 설정하기 (0) | 2021.08.31 |
iOS) 원하는 모서리만 cornerRadius 사용하기 (0) | 2021.08.31 |
iOS) Notification.Name extention 해서 사용하기 (0) | 2021.08.23 |
댓글
TAG
- Protocol
- WWDC22
- Firebase
- YPImagePicker
- Notification
- Swift
- MOYA
- Algorithm
- async/await
- urlsession
- WWDC
- SwiftUI
- WidgetKit
- projectsetting
- OpenSourceLibrary
- APNS
- configurable widget
- 2022 KAKAO TECH INTERNSHIP
- Widget
- CloneCoding
- rxswift
- github
- watchOS
- Objective-C
- RxCocoa
- 서버통신
- MVVM
- UserDefaults
- containerBackground
- IOS
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
링크
- Total
- Today
- Yesterday