我即将开始优化我的应用程序,以便发出HTTP请求以及添加对离线使用的支持。
一般的想法是,如果数据已经在缓存中可用,我想让应用程序尽可能顺利,而无需用户等待网络请求。
如果我设置NSURLCache
标题让我们说一天,这将由开箱即用的Cache-Control
处理。问题是服务器资源有时会发生变化(每天,每周或每月),因此用户将拥有旧数据。然而,如果缓存中至少存在某些内容,我仍然希望用户不必等待数据,因为这些数据很可能是最新的。
因此,我正在考虑实施以下解决方案:
returnCacheDataDontLoad
reloadIgnoringLocalCacheData
1
和3
4
强制从缓存(Alamofire
)加载数据:
let configuration = URLSessionConfiguration.default
configuration.requestCachePolicy = .returnCacheDataDontLoad
self.sessionManager = Alamofire.SessionManager(configuration: configuration)
sessionManager!.request(.....)
强制从服务器加载数据:
let configuration = URLSessionConfiguration.default
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
self.sessionManager = Alamofire.SessionManager(configuration: configuration)
sessionManager!.request(.....)
如果有人能够对提议的解决方案发表评论并批评它或提出差异解决方案,我真的很感激,因为我真的想以正确的方式做到这一点。
提前谢谢
答案 0 :(得分:0)
根据评论中的要求,以下是我最终提出的解决方案:
我没有使用NSURLCache
,而是使用Realm(link)编写自己的'缓存层'。他们有一个非常好的API,基本上你可以开箱即用的数据同步。它们还有一个Realm通知(观察者模式)的概念,无论何时数据发生变化,你都会得到一个带有diff的回调。