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:loadObjectsAtResourcePath:usingBlock:不要将对象保存在缓存中