gpt4 book ai didi

iOS - 在本地保存图像的最佳实践 - NSCache 与保存在文档目录中

转载 作者:技术小花猫 更新时间:2023-10-29 10:06:24 26 4
gpt4 key购买 nike

我正在开发一个类似于 Instagram 提要的应用程序(带有包含图像和一些标签的单元格的表格 View )。

对于我从数据库中获取的所有数据,我正在使用 Data Task(因为接收它们不需要太多时间),但是对于图像(它们的 url 我通过数据请求获得),我需要保存到本地以供将来使用(改善用户体验)。

我的逻辑如下:保存在 NSCache 或文档目录中,文件夹内的图像及其下载日期(创建一次并在需要时附加所有其他图像)(我正在删除不是最近 7 天的所有文件夹),然后对于 TableView,只需从那里加载 if,这样 tableview 将平滑滚动,不会直接从其委托(delegate)方法加载 url。那么根据我的需要把它们存放在什么地方比较好,NSCache or Document Directory

期待听到您的建议,谢谢!

最佳答案

NSCache 和持久存储的用途大不相同。 NSCache 将项目保存在内存中并用于优化性能。但它会占用内存 (RAM),您确实应该确保如果您使用 NSCache,您会响应内存警告并在这些情况下清除 NSCache。当应用程序终止时,NSCache 会丢失。

使用持久存储缓存(通常是 Caches 文件夹)用于不同的目的,使您无需通过某些网络请求重新检索 Assets ,但无需将资源保存在内存中。这使它成为跨运行应用程序的 session 或在您可能遇到内存压力、清除 NSCache 但不想从网络重新检索 Assets 的情况下的一种很好的缓存机制。

请注意,我提到了用于持久存储的 Caches 文件夹,而您似乎假设人们会使用 Documents 文件夹,但有两个注意事项:

  1. Apple 越来越注重应用只使用 Documents 文件夹来存放不易重新创建的用户数据,而使用 Caches 文件夹来存放容易重新创建的数据- 检索。参见 File System Basics了解更多信息。

  2. 从 iOS 11 开始,您应该只将用户可见的文档存储在 Documents 文件夹中(参见 WWDC 2017 秋季视频,iOS Storage Best Practices)。即使您在内部使用了不容易重建的文件,除非目的是最终向用户公开这些文件,否则您将使用 Application Support 目录,而不是 Documents 文件夹。

最重要的是,人们通常会将 Caches 文件夹用于基于持久存储的缓存。

请注意,我们通常会使用两层缓存机制。将资源缓存到 both NSCacheCaches 文件夹。然后,当你去获取资源时,首先检查NSCache(真的很快),如果不存在,则检查持久存储,如果不存在,则重新从网络中获取 Assets 。

综上所述,让事情变得更加复杂的是第三种缓存类型,它由 NSURLCache 提供(即网络请求的响应由 NSURLSession< 透明缓存NSURLConnection)。此缓存由记录不完整的规则决定(例如,它不会缓存任何大小超过总缓存大小 5% 的单个项目),并且受网络响应提供的 HTTP header 的约束。不过,此缓存在很大程度上对您透明地运行,并提供内存和持久存储缓存。通常你可以享受 NSURLCache 缓存行为,完全不需要你的干预。它是无缝的(当它工作时)。

关于iOS - 在本地保存图像的最佳实践 - NSCache 与保存在文档目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com