MKNetworkKit缓存不起作用

时间:2012-11-28 13:26:32

标签: ios ios5 ios6 mknetworkkit mknetworkengine

MKNetworkKit缓存面临着非常不寻常的问题。简单来说,问题是“它不起作用”..!

我创建了一个有问题的简单测试项目。该项目不执行任何操作,只是向http://where.yahooapis.com /发出一个简单的GET请求,以获取城市名称的地址或信息。响应,应该在第一次运行时被追逐,并且从第二次调用完成处理程序两次,一次使用缓存响应,再一次使用获取的响应。如下所示,这取自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

提前谢谢。

1 个答案:

答案 0 :(得分:5)

最后,我能够弄明白......!所以这是在缓存期间发生的事情,

  

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

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

为了克服这个问题,它只用一行代码覆盖了一个函数......!

- (int) cacheMemoryCost
{
    return 0;
}