Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
변경된 점
이미지 �업로드 시 이미지 파일 확장자 변경
iOS의 경우 HEIC파일을 사용하여 이미지를 저장합니다. Android에서는 지원하지 않는 포맷으로 두 플랫폼이 공유할 수 있는 파일형식이 필요했습니다.
PNG의 경우 사진의 높은 해상도를 유지할 수 있지만 사진 한장의 용량이 20MB를 넘어 버리는 일이 종종 있었습니다. 이 경우 평균적으로 5초의 로딩 시간이 필요하였습니다.
WebP형식의 경우 PNG만큼 높은 화질을 유지할 수 있고 JPEG보다 압출률이 더 뛰어납니다(20~30%). 따라서 해당 파일 포맷을 채택하였습니다.
UIImage의 경우 기본적으로 WebP형식을 지원하지 않아 써드파티를 사용했습니다.
이미지 캐싱추가
이미지의 빠른 로딩을 위해 캐싱기능을 추가했습니다.
![image](https://private-user-images.githubusercontent.com/106458638/369693387-c5763bdc-5073-49f8-8dfd-9080c22e9cd8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDA3ODYsIm5iZiI6MTczOTI0MDQ4NiwicGF0aCI6Ii8xMDY0NTg2MzgvMzY5NjkzMzg3LWM1NzYzYmRjLTUwNzMtNDlmOC04ZGZkLTkwODBjMjJlOWNkOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQwMjIxMjZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02OTVjZjY5NTg2ZDQwZDA4OGU1MzVlM2UxOTFmZjQwMzQ1MDQ2OGY5ZDhhZTQ1OGRkNDNmNDA5MDA0MTk2NzQzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-vOqL-RtUsH9B3a5SsTs3HLvrp0uOCgaknEklofm_JU)
WebP를 지원하는 캐싱을 구현하기위해 직접 캐싱관리 객체를 구현하였습니다.
메모리 캐싱의 경우 NSCache를 사용했습니다.
디스크 캐싱의 경우 FileManager를 사용했습니다.
이미지 캐싱은 다음과 같은 과정으로 진행됩니다.
학습한점
NSCache의 동작원리 NSString
NSCache는 Key, Value를 모두 클래스로 전달받는다. Key의 경우 강하게, Value의 경우 내부적으로 약하(weak)게 참조를 한다.
NSCache에 저장한 이후에도 해당 객체들에 대한 참조를 유지해야 NSCache에서 삭제되지 않는다.
외부 참조가 없을 경우 Key, Value쌍은 자동으로 삭제될 수 있다. (실제로 바로 삭제되진 않고 NSCache의 삭제대상이 된다.)
그리고 Key값비교는 참조비교를 통해 진행됨으로 인스턴스 내부 값이 같아도 다른 키로 인식된다.
이런 방식을 사용하는 이유는 메모리 관리를 원할하게 하기 위함이라고 한다.
NSString
의 경우 내용이 같으면 모든 인스턴스가 하나의 객체를 공유한다.특정 Key인스턴스를 여러곳에서 공유할 필요가 없음으로 Key값으로 사용하기 적절한 클래스이다.