본문 바로가기

난 iOS개발자/iOS

NSCache

728x90

캐시?

사용한 자원을 재사용이 가능하게 특정 영역에 저장해 놓는것을 의미한다. 쉽게 볼 수 있는 캐시는 웹 이미지를 다운로드 한 후 캐시하는것이다. 캐시를 하게 되면 다시 다운로드하면서 데이터를 소모하지 않더라도 저장된 캐시이미지를 불러와 볼 수 있게 된다.

캐싱의 종류는 크게 둘로 나눈다.
Memory Caching 과 Disk Caching

메모리 캐싱은 메모리 영역의 일부분을 캐싱에 사용하는것이다. 메모리는 애플리케이션이 종료되면 사용중이던 메모리 영역을 반환하게 되므로 앱 종료와 함께 캐싱된 정보도 사라지게 된다. 

반면 디스크 캐시는 데이터를 파일 형태로 디스크 영역에 저장하는것으로 애플리케이션을 종료해도 저장한 정보가 사라지지 않는 장점이 있지만 애플리케이션의 전체 용량이 증가한다는 단점이 존재한다. 

 

NSCache

NSCache는 Key-Value형태의 데이터 저장 컬렉션이다. 다만 캐시데이터가 시스템 메모리를 너무 많이 사용하지 않도록 제거정책이 있기 때문에 다른 응용프로그램에서 메모리가 필요한 경우 캐시에서 일부 항목을 제거하여 메모리 사용 공간을 최소화 시킬 수 있다. 그렇게 되면 값들이 필요할때 다시 계산해야 한다.

 

특징:

  • limitation을 정할 수 있으며 이를 over하게 되면 적은 용량부터 데이터를 삭제한다.
  • Thread-Safe하며 여러 스레드에서 접근할 때에도 Lock을 걸어줄 필요가 없다.
  • NSMutableDictionary와 달리 캐시에 저장된 키 객체를 복사하지 않는다.
  • 연결 리스트와 Dictionary를 함께 사용합니다.

 

NSDictionary의 경우 key로 사용되는 객체는 NSCopying프로토콜을 지원한다.

때문에 key로 사용되는 객체는 복사된다. NSMutableString타입의 Key를 사용해서 Value를 저장한다고 할 때, 그리고 NSMutableString이 NSCopying을 따르지 않고 key를 retain시킨 채 상요한다고 하면 나중에 NSMutableString key가 수정되었을 때 그에 해당하는 value를 갑찾을 수 없게 된다. 

 

 

 

728x90

'난 iOS개발자 > iOS' 카테고리의 다른 글

COW(Copy On Write)  (0) 2022.05.28
Global DispatchQueue의 QoSClass  (0) 2022.05.10
ARC(Auto Reference Counting)  (0) 2022.05.05
String을 Subscript로 접근할 수 없는 이유  (0) 2022.05.04
Class의 성능을 향상 시키는 방법  (0) 2022.05.03