연관 문서
WWDC 18 iOS Memory Deep Dive
Tips
- 만약 캐싱 목적으로 Dictionary 를 사용한다면, NSCache 를 사용하는 것을 고려하자.
- Dictionary 는 Memory Compressor 의 동작 때문에 메모리 워닝 관리가 까다롭다.
- 캐시에는 메모리 캐시와 디스크 캐시가 있는데, NSCache 는 메모리 캐시와 관련된 것이다.
- 디스크 캐시를 어디에 쓰는 것인지는 아직 잘 모르겠다.
참고로 SDWebImage 를 사용할 때, http 응답 헤더의 content-type 이 octet-stream 인 경우 메모리가 아닌 세컨더리 스토리지에 저장되어 디스크 캐시로 사용되는 것 같이 보였다.
다른 Mutable Collection 과의 차이점
- Various auto-eviction policies
- 위 정책들을 통해 메모리를 많이 잡아먹지 않는 것을 보장해준다.
- 시스템이 메모리가 부족하다면, 위 정책들은 캐시의 몇몇 아이템을 삭제시켜 memory footprint 를 최소화한다.
- eviction : 방출, 축출
- Thread Safe
- 캐시를 lock 할 필요 없이 다른 쓰레드에서 캐시에 아이템을 추가/삭제/요청 할 수 있다.
- Unlike an
NSMutableDictionary
object, a cache does not copy the key objects that are put into it.
- 관련 내용에 관한 글을 3, 4개 읽어보았는데 이 동작 특성이 어떤 의미를 갖는 건지는 아직 잘 모르겠음
- Objc-C 를 잘 몰라서 일수도…?
캐시에 대한 생각
- 캐시 자체를 언제하는가?
- 캐시는 연산 능력과 메모리와의 맞교환이다.
- 즉, 캐시를 통해 성능 향상을 기대할 수 있다.
- 생성 비용이 큰 일시적인 테이터를 임시로 저장할때 캐시를 고려할만하다.
API
- 사용법이 어렵지 않아 공식 문서로 이해하기 충분하다.
읽었지만 정리는 하지 않은 부분