我正在使用sessionConfiguration创建NSURLSession
,其中我已明确设置requestCachePolicy
和URLCache
。
sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
sessionConfiguration.URLCache = [NSURLCache sharedURLCache];
创建请求并将其作为NSURLSession
dataTaskWithRequest:CompletionHandler:
方法中的参数传递。请求的构造如下:
request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:kAENServiceNetworkTimeout];
问题1:
如此设置,磁盘上不会创建fsCachedData
文件夹,也不会使用缓存数据。如果仅使用以下命令创建请求:
request = [NSMutableURLRequest requestWithURL:url];
在磁盘上创建缓存,并按预期使用映像。这是Apple代码中的错误吗?
问题2:
在这两种情况下都没有调用URLSession:dataTask:willCacheResponse:completionHandler:
委托方法。他们的情况是否会出现这种情况?
更新
我已将示例项目推送到Github,https://github.com/mattmorton/cache-testing
答案 0 :(得分:0)
问题1:
我认为我对NSURLRequestReturnCacheDataElseLoad的理解不正确。在这种情况下,响应不会被缓存。
问题2:
来自NSURLSessionAsynchronousConvenience类别中的NSURLSession的Apple标题:
数据任务便捷方法...创建绕过正常委托调用以响应和数据传递的任务,并提供一个简单的可取消异步接口来接收数据。
我正在使用一个便捷方法处理程序,因此没有调用委托方法。