HypeDitto / iOS-Study

iOS 기술 면접 대비
0 stars 0 forks source link

NSCache와 딕셔너리로 캐시를 구성했을때의 차이를 설명하시오. #33

Open HeegeePark opened 1 year ago

HeegeePark commented 1 year ago

딕셔너리는 메모리가 부족하면 값을 삭제하는 코드를 작성해야 하지만 NSCache는 메모리가 자동으로 관리된다.

NSCache 는Thread-safe하다. lock하지 않아도 다른 스레드에서 캐시의 항목을 추가, 제거, 검색할 수 있다.

NSCache는 객체를 복사하지 않고 그대로 가져가지만, NSMutableDictionary의 Key는 객체를 복사해서 새로운 객체를 생성해서 Key로 등록한다.

YouHojoon commented 1 year ago

NSCache

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"