NSURLCache用于NSURLSession后台任务

时间:2016-02-16 13:22:07

标签: nsurlsession nsurlcache nsurlsessionconfiguration

我试图在我的应用中实现缓存,我使用NSURLSession和后台配置来满足我的大多数网络需求而且效果很好但是我在会话中忽略了添加缓存对象它总是去服务器

我尝试使用带缓存的默认会话实例,系统使用缓存

之前我已多次阅读过该文档,但没有提及忽略后台任务的缓存对象

有谁知道这是一个错误还是其他什么

2 个答案:

答案 0 :(得分:0)

后台会话仅支持上传和下载任务,而不支持数据任务。 数据任务使用缓存。因此没有理由让后台会话检查缓存。

如果要对下载进行缓存,则必须自己将响应显式添加到共享URL缓存中,并在启动后台任务之前检查它是否包含缓存的响应。

有关详细信息,请参阅NSURLCache的文档。

答案 1 :(得分:0)

哇,我很久以前问过这个问题,但仍然没有答案。

告诉你一个事实,我最终为此使用了一个DTS令牌。

事实证明,无论您使用什么任务,NSURLSession后台配置都根本不支持兑现。

这是苹果公司的一项设计决策,证据不足。

这里是我收到的DTS重播的一部分:

  

我正在回答您有关NSURLSession后台会话与NSURLCache之间的关系的问题。您写道:

     
    

然后,我将NSURLCache对象添加到配置中,NSURLSession机制完全忽略了它。

  
     

的确。这是预期的行为,因为当前情况是NSURLSession后台会话/ never /缓存。造成这种情况的原因很多:

     
      
  • 完全支持URLCache属性是不可行的。具体来说,我们不允许您使用NSURLCache的自定义子类,因为这将需要我们将代码加载到系统守护程序中(请记住,此处的实际工作是由NSURLSession守护程序在您的应用暂停时完成的,甚至终止)。

  •   
  • 即使我们仅将您限制为标准NSURLCache类的实例,事情也会变得棘手,因为我们希望将该缓存使用的磁盘空间记入您的应用程序。鉴于您的应用程序和NSURLSession守护程序之间存在安全障碍,因此很难进行整理。

  •   
  • 这里存在哲学上的脱节。 NSURLSession后台会话旨在用于少量的大型传输,而NSURLCache仅在进行大量的小型传输时才真正有用。

  •   
     

注意:通过NSURLSession后台会话运行许多小的传输可能会由于其他原因导致问题。有关更多信息,请阅读以下DevForums帖子:

     
      
  • NSURLSession的恢复速率限制器
  •   
     

https://forums.developer.apple.com/message/42352#42352

     
      
  • 转移到更少,更大的转账
  •   
     

https://forums.developer.apple.com/thread/14853

     

如果您希望NSURLSession工程师重新考虑此缓存设计决策,则可以随时提出一个错误,要求其予以支持。确保您详细说明了用例。

     

https://developer.apple.com/bug-reporting/

     

您的错误可能会以“行为正确”的形式返回,但问问并没有问题。

     

关于错误,我想您浏览了NSURLSession文档,却没有发现这个问题。如果是这样,不胜感激,请根据您查看的文档提出一个错误,要求该错误包含有关此问题的信息。