我正在构建一个应用程序,并希望使用 NSCache
来存储数据以进行缓存。
大约有 5 个 API 需要我缓存数据。我应该使用 NSCache 吗?我对 NSCache 进行了研究,但对此我有一些疑问。
我确实浏览了下面的链接。
我在那里发现了一些有趣的东西。
NSCache provides two other useful "limit" features: limiting the number of cached elements and limiting the total cost of all elements in the cache. To limit the number of elements that the cache is allowed to have, call the method setCountLimit:. For example, if you try to add 11 items to a cache whose countLimit is set to 10, the cache could automatically discard one of the elements.
如果我们将限制设置为 10,并且尝试添加第 11 项,那么它将丢弃第 1 项还是第 10 项?或者它可以是随机项目。
如果我想为所有 API 存储 5 个不同的 NSCache 对象,我该怎么做?
我应该创建 5 个不同的 NSCache
对象,还是应该在单个 NSCache 对象中存储 5 个不同的字典?
请让我知道处理该问题的最佳方法。
最佳答案
NSCache
基本上作为一个 NSMutableDictionary
工作,主要区别在于即使是可变的也是线程安全的(通常可变的 NSFoundation 对象不是线程安全的)。因此,您可以使用键获取和设置对象。
是的,文档不清楚,但我记得(这是有道理的),您应该始终检测对象是否被缓存,如果没有从主要源重新加载它或管理特定情况。因此,删除哪个对象并不重要,只需确保在某个时刻某个对象不再存在,并且您正在管理这种情况即可。
我通常根据不同的上下文创建不同的缓存,但大多数时候一个就足够了。
我有一些建议:
- 您的答案被标记为 Swift,因此请注意
NSCache
(在 swift 2 中,在 3 中不知道)仅适用于对象,而不适用于结构或枚举(值类型,除非它们可以是桥接)。 - 记住http协议(protocol)有自己的缓存系统和通信,不要重新发明轮子
关于ios - 如何在iOS应用程序中正确使用NSCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41974549/