Jac*_*ite 15 uiimage ios nscache nsurlsession
我正在开发一个类似于Instagram Feed的应用程序(包含图像和一些标签的单元格的表格视图).
对于我从数据库中获取的所有数据,我正在使用数据任务(因为接收它们并不需要太多),但是对于图像(我们使用数据请求获取它们的URL),我需要保存在本地以备将来使用(改善用户体验).
我的逻辑如下:保存在NSCache或文档目录中,文件夹中的图像带有下载日期(创建一次并附加所有其他图像,如果需要)(我正在删除不是来自最近的7个文件夹)几天,然后对于TableView,只是从那里加载,所以tableview将平滑滚动,不会直接从其委托方法加载网址.那么根据我的需求,NSCache或文档目录,哪里有更好的存储位置.
期待听到您的建议,谢谢!
Rob*_*Rob 39
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和透明地缓存NSURLConnection).此缓存由记录不良的规则决定(例如,它不会缓存大小超过总缓存大小的5%的任何单个项目),并受网络响应提供的HTTP标头的约束.但是,此缓存对您来说非常透明,并提供内存和持久存储缓存.通常,您可以享受NSURLCache缓存行为,而您绝对不会干预.它是无缝的(当它工作时).
| 归档时间: |
|
| 查看次数: |
9396 次 |
| 最近记录: |