使用不同的POST请求进行NSURLCache缓存

时间:2015-09-18 15:14:23

标签: ios nsurlsession nsurlcache

我正在使用NSURLSession进行网络连接并向服务器发出POST请求。我希望能够缓存这些请求,但URL始终是相同的。

是否可以使用NSURLCache进行缓存并将缓存键更改为独特的内容,例如请求正文?

1 个答案:

答案 0 :(得分:0)

默认情况下,IIRC,POST请求根本没有缓存。但是,是的,你当然可以做到。 IIRC,在NSURLSession方面,您唯一可以控制的是请求是否被缓存。要实际控制缓存它的名称,您需要实现自定义URL协议。我从来没有做过你想要做的事,但我很确定你的做法大致如下:

  • 创建NSURLProtocol子类,并通过会话配置上的protocolClasses属性提供它。从那时起,只要该会话发出URL请求,就会首先调用您的类。

  • 在该子类中,在 startLoading 方法中,使用 setProperty:forKey:inRequest:将请求标记为已经过协议处理。

  • canInitWithRequest 方法中,调用 propertyForKey:inRequest:以查看请求是否已被标记,如果已标记,则返回NO。这样,您就会看到每个请求一次。

  • startLoading 方法中,使用带标记的请求启动新数据任务。

  • 停止加载中,取消任务。

  • canonicalRequestForRequest:中,进行转换。您可能必须使用 setProperty:forKey:inRequest:来存储原始未修改的URL,以防您收回修改后的URL。 (我不确定。)

  • 我认为您不需要实现 requestIsCacheEquivalent:toRequest:,但请记住,以防万一我错了。您也许可以实现它而不是规范化方法。

相关问题