【问题标题】:iOS REST calls and caching strategiesiOS REST 调用和缓存策略
【发布时间】:2013-11-15 14:18:08
【问题描述】:

我过去曾使用过几种不同的策略来在浏览基于 REST 的 iOS 应用程序的各种屏幕时提供最佳用户体验:

  • 利用 NSURLCache:虽然这适用于某些用例, 我对这样的方法更感兴趣:“显示 调用 API 时立即缓存,然后用更新的屏幕更新屏幕 必要时提供数据”。NSURLCache 似乎只为我提供了选项 例如读取表单缓存或从远程读取取决于各种 策略,但不从缓存中读取 THEN 从远程读取。
  • 利用核心数据:无论是通过 Restkit、AFIncrementalStore 还是自定义框架,这里的想法是从核心数据中获取数据,同时 正在拨打电话。一旦调用返回,核心数据就会更新 最新数据和界面被刷新。它可以很好地工作,但是 需要大量的配置和维护,增加了高 复杂程度。当需要离线模式时,这是一个不错的选择, 但如果只需要缓存,这看起来有点矫枉过正。 -

是否有人对此有不同的方法,或者有一个轻量级的库可以推荐,它提供高级缓存功能,而不需要 Core Data?

【问题讨论】:

    标签: ios rest caching user-experience nsurlcache


    【解决方案1】:

    利用 NSURLCache :您基本上希望将内存缓存合并到框架中。是的,它存在,它被称为AFNetworkingHere 是指定相同的文档。它从您的代码中抽象出缓存机制。

    您必须设计一个数据控制器来检查磁盘上是否有数据(核心数据),如果没有,则使用 AFNetworking(还包括内存缓存)发出网络请求。

    没有框架可以为您提供使用核心数据的磁盘缓存和使用 NSURLcache 的内存缓存

    【讨论】:

    • 这不能回答问题。 AFNetworking 依赖于 NSURlcache,这是我提到的第一个策略及其优缺点,第二个要点是使用基于核心数据的解决方案。我问是否有人想到了比这两个更好的策略,或者将它们组合在一个轻量级库中。据我所知,AFNetworking 没有提供任何高级缓存机制,除了已经通过 NSURLCache 提供的机制
    • 答案是没有这样的东西,你必须自己构建。
    • 我不确定你是否很有趣并且值得竖起大拇指,或者这是否是你尽力回答的问题。无论如何,我为自己的问题添加了答案。
    【解决方案2】:

    我的问题的一个可能答案是利用 NSCoding/NSKeyedArchiver。

    可以在这里找到一个很好的描述http://nshipster.com/nscoding/

    通过 NSKeyedArchiver,我可以保存数据,而无需使用 Core Data 设置整个数据模型。 问题变成了如何围绕 NSKeyedArchiver 构建有效的缓存机制,以及第三方库是否已经在这样做。而且貌似有一个答案叫TMCachehttps://github.com/tumblr/TMCache

    所以我现在的意图是让我的类符合 NSCoding,让一些对象通过 TMCache 持久化。我计划先将我的 API 调用路由到缓存,同时在后台更新缓存。

    【讨论】:

    • 能否请您展示如何使用nscoding的代码,以便在调用api时立即显示缓存数据并在可用时显示更新的数据
    猜你喜欢
    • 2012-09-05
    • 2013-04-07
    • 2017-04-06
    • 2010-10-06
    • 2020-08-03
    • 2011-11-12
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多