设置 NSURLRequestCachePolicy 和 NSURLSession

Setting NSURLRequestCachePolicy and NSURLSession

我正在创建一个带有 sessionConfiguration 的 NSURLSession,我在其中明确设置了 requestCachePolicyURLCache

sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
sessionConfiguration.URLCache = [NSURLCache sharedURLCache];

创建请求并将其作为参数传递到 NSURLSession dataTaskWithRequest:CompletionHandler: 方法中。请求构造如下:

request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:kAENServiceNetworkTimeout];

问题一:

像这样设置,没有fsCachedData在磁盘上创建文件夹并且不使用缓存数据。如果仅使用以下方法创建请求:

request = [NSMutableURLRequest requestWithURL:url];

缓存已在磁盘上创建,图像按预期使用。这是 Apple 代码中的错误吗?

问题二:

在这两种情况下都不会调用 URLSession:dataTask:willCacheResponse:completionHandler: 委托方法。他们的情况是这样吗?

更新:

我已将示例项目推送到 Github、https://github.com/mattmorton/cache-testing

问题一:

我认为我对 NSURLRequestReturnCacheDataElseLoad 的理解不正确。在这种情况下,不会缓存响应。

问题二:

来自 Apple header NSURLSessionAsynchronousConvenience 类别中的 NSURLSession:

data task convenience methods...create tasks that bypass the normal delegate calls for response and data delivery, and provide a simple cancelable asynchronous interface to receiving data.

我正在使用便捷方法处理程序,因此没有调用委托方法。