NSCache
和持久存储的用途大不相同。NSCache
将项目保存在内存中并用于优化性能。但它会占用内存 (RAM),你真的应该确保如果你使用NSCache
它,你会响应内存警告并NSCache
在这些情况下清除它们。当应用程序终止时,它就NSCache
丢失了。
使用持久存储缓存(通常是Caches
文件夹)用于不同的目的,使您无需通过某些网络请求重新检索资产,但无需将资源保存在内存中。这使它成为跨运行应用程序的会话或在您可能遇到内存压力、清除NSCache
、但不想从网络重新检索资产的情况下的出色缓存机制。
请注意,我提到了Caches
用于持久存储的文件夹,而您似乎认为会使用Documents
文件夹,但有两个注意事项:
Apple 越来越注重应用程序仅使用Documents
文件夹来存储无法轻松重新创建的用户数据,并使用Caches
文件夹存储易于重新检索的数据。有关详细信息,请参阅文件系统基础知识。
从 iOS 11 开始,您应该只在Documents
文件夹中存储用户可见的文档(请参阅 WWDC 2017 秋季视频,iOS 存储最佳实践)。即使您在内部使用了不易重构的文件,除非最终将用户公开给它们,否则您将使用Application Support
目录,而不是Documents
文件夹。
最重要的是,通常会将该Caches
文件夹用于基于持久存储的缓存。
注意,我们经常使用两层缓存机制。将资源缓存到文件夹和文件 夹。然后,当您去检索资源时,首先检查(非常快),如果不存在,则检查持久存储,如果不存在,则从网络中重新检索资产。NSCache
Caches
NSCache
说了这么多,更复杂的是,还有第三种类型的缓存,由提供NSURLCache
(即对网络请求的响应由NSURLSession
and透明地缓存NSURLConnection
)。此缓存由记录不充分的规则决定(例如,它不会缓存任何大小超过总缓存大小的 5% 的单个项目),并且受网络响应提供的 HTTP 标头的约束。但是,此缓存对您来说很大程度上是透明的,并提供内存和持久存储缓存。通常,您可以在NSURLCache
完全没有干预的情况下享受缓存行为。它是无缝的(当它工作时)。