Open HeegeePark opened 1 year ago
리소스가 부족하면 자동으로 삭제
복사를 지원하지 않는 객체까지 포용 NSCopying 프로토콜을 채택하지 않은 객체까지 사용할 수 있다.
let mutableDic = NSMutableDictionary()
var dicKey: NSMutableString = "key" // K₁
mutableDic.setObject("one", forKey: dicKey) // K₂
dicKey.setString("changedKey") // still K₁
mutableDic.setObject("two", forKey: dicKey) // K₃
print(mutableDic.object(forKey: "key") ?? "") // "one"
print(mutableDic.object(forKey: "changedKey") ?? "") // "two"
let cache = NSCache<NSString, NSString>()
var cacheKey: NSMutableString = "key" // K₁
cache.setObject("one", forKey: cacheKey) // still K₁
cacheKey.setString("changedKey") // still K₁
cache.setObject("two", forKey: cacheKey) // still K₁!
print(cache.object(forKey: "key") ?? "") // ""
print(cache.object(forKey: "changedKey") ?? "") // "two"
딕셔너리는 메모리가 부족하면 값을 삭제하는 코드를 작성해야 하지만 NSCache는 메모리가 자동으로 관리된다.
NSCache 는Thread-safe하다. lock하지 않아도 다른 스레드에서 캐시의 항목을 추가, 제거, 검색할 수 있다.
NSCache는 객체를 복사하지 않고 그대로 가져가지만, NSMutableDictionary의 Key는 객체를 복사해서 새로운 객체를 생성해서 Key로 등록한다.