【问题标题】:MKNetworkKit caching not workingMKNetworkKit 缓存不起作用
【发布时间】:2012-11-28 13:26:31
【问题描述】:

我正面临 MKNetworkKit 缓存这个非常不寻常的问题。简而言之,问题是“它不起作用”..!

我创建了一个有问题的简单测试项目。该项目什么都不做,只是向http://where.yahooapis.com/ 发出一个简单的GET 请求,以获取城市名称的地址或信息。响应应该在您第一次运行时被 chached,并且从第二次开始,完成处理程序将被调用两次,一次是缓存响应,另一次是获取的响应。如下图所示,取自http://blog.mugunthkumar.com/coding/ios-tutorial-image-cache-and-loading-thumbnails-using-mknetworkkit/

MKNetworkKit 使用缓存数据调用 SAME 完成处理程序,如果您 正在第二次打电话。当网络连通 是正确的,MKNetworkKit 两次调用您的完成处理程序。第一的 使用缓存的数据,并在从中获取最新数据后再次 服务器。

嗯,不寻常的是,我运行应用程序,它没有缓存,我再次运行应用程序,它再次没有缓存,在一些随机运行后突然缓存开始工作。我删除了该应用程序并再次运行它,缓存将无法工作,直到一些随机运行和问题重复......!

仅供参考,我使用了从GIT 下载的最新 MKNetworkkit。

不确定是我的代码有问题,还是 MKNetworkKit 本身的错误。所以请检查代码,让我知道是我还是 MKNetworkKit 导致了这个问题。

这里是下载示例项目的链接 [https://www.box.com/s/tsfw3z0avpti051xbyhv]4

提前谢谢。

【问题讨论】:

    标签: ios ios5 ios6 mknetworkkit mknetworkengine


    【解决方案1】:

    终于,我能弄明白了..!所以这就是在缓存期间发生的事情,

    MKNetworkKit 缓存是超轻量级的,它可以缓存你的 NSMutableDictionary 中的响应。这不会导致高内存吗 用法?是的。当然,但 MKNetworkKit 很聪明。它观察到 UIApplicationDidReceiveMemoryWarningNotification 并刷新 字典到磁盘。下次您向缓存中发出请求时 URL,缓存的数据被带回内存。所以实际上,它有一个 内存缓存和磁盘缓存,并使用最近最少使用的 将项目刷新到磁盘的算法。 MKNetworkEngine 类有 可以重写以控制缓存成本的方法。

    所以,发生的事情是,当我第一次运行应用程序时,响应被缓存在“内存”中,而不是“磁盘”中。当我冷启动应用程序时,之前缓存的响应从未从“内存”传输到“磁盘”。 (这就是为什么在应用程序的缓存目录中甚至没有缓存文件的原因......!)因此,successBlock 从未被调用两次,并带有缓存响应,因为没有......!

    要解决这个问题,只需用一行代码覆盖一个函数...!

    - (int) cacheMemoryCost
    {
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2015-05-25
      • 1970-01-01
      • 2013-08-31
      • 2012-09-01
      • 2015-05-27
      • 1970-01-01
      相关资源
      最近更新 更多