iOS:是否存在具有TTL和最大大小的内存缓存?

时间:2012-06-15 14:11:12

标签: iphone objective-c caching

我需要为我的iOS应用程序提供内存中的通用缓存,支持在达到最大大小时提供生存时间和自动清除元素内的项目。这样的事情存在吗?

NSCache无法正常工作,因为它不支持TTL。

我正在进行自己的推广,但如果我不必这样做会很好。

1 个答案:

答案 0 :(得分:1)

使用NSCache,您可以在某个限制后使用setTotalCostLimit:清除内存。正如文件所述。

  

默认值为0,表示缓存大小没有限制。如果将对象添加到缓存,则可以传入对象的指定开销,例如对象的大小(以字节为单位)。如果将此对象添加到缓存会导致缓存的总成本超过totalCostLimit,则缓存可能会自动逐出某些对象,直到其总成本低于totalCostLimit。不保证高速缓存驱逐对象的顺序。此限制不是严格限制,如果缓存超过限制,缓存中的对象可能会立即被驱逐,或者可能永远不会被驱逐,所有这些都取决于缓存的实现细节。

如果您还没有,请查看Caching and Purgeable Memory文档。

或者,我遇到了一个用CTL编写并用TTL支持编写的NSCache类。您可以在编写自己的指南时将其作为指南使用,可以查看here

希望这有帮助!