Cache
- 캐시를 사용하는 이유: 개발자는 캐시를 사용하여 계산 비용이 많이 들 수 있는 일시적인 데이터와 함께 자주 액세스하는 개체를 저장합니다. 이러한 객체를 재사용하면 해당 값을 다시 계산할 필요가 없기 때문에 성능상의 이점을 얻을 수 있습니다. 그러나 객체가 앱에 중요하지 않으며 메모리가 부족한 경우 삭제할 수 있습니다. 버려지면 필요할 때 값을 다시 계산해야 합니다.
- 캐싱으로 인해 발생할수 있는 문제: 캐싱은 성능 측면에서 엄청난 이점을 제공할 수 있지만 캐싱이 제공하는 몇 가지 가능한 단점도 있습니다. 가장 중요한 것은 캐싱이 매우 많은 양의 메모리를 사용할 수 있다는 것입니다. 많은 대용량 데이터 객체를 캐시할 때 너무 많은 객체를 캐시하여 다른 앱을 위한 RAM이 남지 않을 수 있으며, 시스템은 RAM을 확보하기 위해 이 모든 데이터를 디스크에 쓸 때 중단됩니다.
NSCache
Cocoa는 캐시하려는 항목을 위한 편리한 저장 컨테이너로 NSCache
객체를 제공하는 동시에 위에서 논의한 메모리 관리 문제를 해결합니다. NSCache
클래스는 둘 다 키-값 쌍을 보유한다는 점에서 NSDictionary
클래스와 매우 유사합니다. 그러나 NSCache
객체는 "반응형 캐시"입니다. 즉, 메모리를 사용할 수 있는 경우 제공된 모든 데이터를 적극적으로 캐시합니다. 그러나 메모리가 부족하면 다른 응용 프로그램에 사용할 메모리를 확보하기 위해 일부 요소를 자동으로 버립니다. 나중에 이러한 폐기된 항목이 필요한 경우 해당 값을 다시 계산해야 합니다. NSCache
는 캐시된 요소의 수를 제한하고 캐시에 있는 모든 요소의 총 비용을 제한하는 두 가지 유용한 "제한" 기능을 제공합니다.
- 캐시가 가질 수 있는 요소의 수를 제한하려면
setCountLimit:
메소드를 호출하십시오. 예를 들어 countLimit이 10으로 설정된 캐시에 11개의 항목을 추가하려고 하면 캐시에서 요소 중 하나를 자동으로 삭제할 수 있습니다. - 캐시에 항목을 추가할 때 각 키-값 쌍과 연결할 비용 값을 지정할 수 있습니다.
setTotalCostLimit:
메소드를 호출하여 캐시된 모든 객체의 비용 합계에 대한 최대값을 설정합니다. 따라서 totalCost를 totalCostLimit 이상으로 밀어 넣는 개체가 추가되면 캐시는 임계값 아래로 돌아가기 위해 일부 개체를 자동으로 제거할 수 있습니다. 이 제거 프로세스는 보장되지 않으므로 특정 동작을 달성하기 위해 비용 값을 조작하려고 하면 캐시 성능이 저하될 수 있습니다. 유용한 것이 없으면 비용으로 0을 전달하거나 비용을 전달할 필요가 없는setObject:forKey:
메소드를 사용하십시오. - [참고] 카운트 한도와 총 비용 한도는 엄격하게 적용되지 않습니다. 즉, 캐시가 한도 중 하나를 초과하면 캐시의 구현 세부 정보에 따라 캐시의 일부 개체가 즉시, 나중에 또는 전혀 제거되지 않을 수 있습니다.
URLCache
참조
'' 카테고리의 다른 글
Sync/Async (0) | 2022.11.05 |
---|---|
GCD/Operation (0) | 2022.11.05 |
setNeedsLayout() vs. setNeedsDisplay() (0) | 2022.11.03 |
LifeCycle (0) | 2022.10.28 |
언어 및 지역에 해당하는 문자열 (0) | 2022.10.01 |