我需要为我的 iOS 应用程序提供一个内存中通用缓存,该缓存支持在生存时间内提供项目并在达到最大大小时自动清除元素。这样的事情存在吗?
NSCache无法正常工作,因为它不支持TTL。
我正在滚动自己的,但如果没有必要,那就太好了。
有了NSCache
,您就可以利用setTotalCostLimit:
在达到一定限制后清除内存。 正如文档所述。
默认值为 0,这意味着缓存的大小没有限制。如果将对象添加到缓存,则可以传入该对象的指定开销,例如对象的大小(以字节为单位)。如果将此对象添加到缓存导致缓存的总成本高于 totalCostLimit,则缓存可以自动逐出其某些对象,直到其总成本低于 totalCostLimit。无法保证缓存逐出对象的顺序。此限制不是严格的限制,如果缓存超过限制,缓存中的对象可能会立即被逐出,也可能在以后的时间点被逐出,或者可能永远不会被逐出,所有这些都取决于缓存的实现细节。
如果尚未查看,则应查看缓存和可清除内存文档。
或者,我遇到了一个用 C++ 编写的 NSCache
类,支持 TTL 支持。在编写自己的内容时,您可以很好地将其用作指南,可以在此处查看
希望这有帮助!