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

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

【问题讨论】:

    标签: ios 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%)是实时工作的。
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2011-03-11
    • 2014-08-12
    • 2011-11-03
    • 2013-11-15
    • 2011-06-14
    相关资源
    最近更新 更多