Restkit,禁用缓存

Posted

技术标签:

【中文标题】Restkit,禁用缓存【英文标题】:Restkit, disable caching 【发布时间】:2012-02-27 10:13:44 【问题描述】:

我很难尝试在 Restkit 框架中禁用缓存。 我尝试将缓存策略设置为无,完全没有效果。这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

所以一旦你有了一个客户端,要么显式初始化它:

RKClient *client = [RKClient clientWithBaseURL:url];

或者让对象管理器来做:

RKObjectManager* om = [RKObjectManager managerWithBaseURLString:url];
RKClient *client = om.client;

设置缓存策略应该很简单:

client.cachePolicy = RKRequestCachePolicyNone;

那是你在做什么?

更新:由于日志消息是唯一令人担忧的事情,我决定追查其来源。 tl;dr 版本是忽略消息并相信日志代理告诉您的内容。

为了仔细检查,我搜索了“路径缓存无效”,并在 RKCache invalidateSubDirectory:RKCache invalidateAll 两个位置找到了它,并在它们上设置了断点。这是我的一些代码的部分堆栈跟踪:

#0  0x000e6c66 in -[RKCache invalidateSubDirectory:] at RestKit/Code/Support/RKCache.m:189
#1  0x0006b767 in -[RKRequestCache invalidateWithStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:237
#2  0x0006b958 in -[RKRequestCache setStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:253
#3  0x00069abf in -[RKRequestCache initWithPath:storagePolicy:] at RestKit/Code/Network/RKRequestCache.m:60
#4  0x000586f3 in -[RKClient baseURLDidChange:] at RestKit/Code/Network/RKClient.m:339
#5  0x000589ce in -[RKClient observeValueForKeyPath:ofObject:change:context:] at RestKit/Code/Network/RKClient.m:373
#6  0x0183cd91 in NSKeyValueNotifyObserver ()
#7  0x0183c895 in NSKeyValueDidChange ()
#8  0x0182233e in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#9  0x01844a82 in _NSSetObjectValueAndNotify ()
#10 0x00057404 in -[RKClient initWithBaseURL:] at RestKit/Code/Network/RKClient.m:176
#11 0x00056df3 in +[RKClient clientWithBaseURL:] at RestKit/Code/Network/RKClient.m:130

我从中学到的是有两个控制缓存的枚举:

RKRequestCachePolicy 是你在客户端设置的,它控制什么时候查询缓存。 RKRequestCacheStoragePolicy 确定结果在设备上存储多长时间(从不、会话持续时间、永久)。

作为设置客户端的一部分,当设置 URL 时,客户端使用RKRequestCacheStoragePolicyPermanently 设置存储策略创建一个新缓存,包括清除先前的会话缓存以及(如果禁用缓存)永久缓存。这就是您在日志消息中看到的清除。

【讨论】:

感谢您的回复。我刚刚尝试过,仍然收到消息“restkit.support:RKCache.m:178 Invalidating cache at path:” 这是唯一表明它正在缓存的东西吗?您是否尝试过使用 Charles 或其他日志代理来查看服务器输出的内容? 我已经尝试过代理日志记录,没有任何问题,我确实收到了服务器的预期数据。实际上,应用程序的行为没有任何问题,我的数据很好,一切都按预期进行。但是,我的记录器一直给我那些消息“路径缓存无效:....”。看起来restkit试图删除缓存现有文件,但不能。如前所述,我只是担心这些操作不利于性能或 Apple 验证。 我刚刚用更多信息更新了我的答案。简短的版本是它正在做它应该做的事情,没有必要担心。为什么不想要任何缓存? 第一个:我需要调试,看到它充满了这条消息很烦人第二个:应用程序的很大一部分(大约 60-70%)是实时工作的。

以上是关于Restkit,禁用缓存的主要内容,如果未能解决你的问题,请参考以下文章

RestKit + CoreData:从CoreData缓存中排除某些对象

RestKit - 仅在第二次调用时将缓存保存到核心数据

RestKit 在缓存中重复

更新 RestKit:loadObjectsAtResourcePath:usingBlock:不要将对象保存在缓存中

清除three20 & Restkit缓存信息以释放磁盘内存空间

如何判断 RestKit v0.20.2 是不是提供了实体缓存的结果?