
- (voID)downloadUsingNSURLSessionDataTask:(NSURL *)url { NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request]; [dataTask resume];}- (voID)cachedDataTaskTest { // This call performs an http request [self downloadUsingNSURLSessionDataTask:[NSURL URLWithString:@"http://AJAX.GoogleAPIs.com/AJAX/libs/jquery/1.7.1/jquery.min.Js"]]; [NSThread sleepForTimeInterval:1]; // This call returns the locally cached copy,and no http request occurs [self downloadUsingNSURLSessionDataTask:[NSURL URLWithString:@"http://AJAX.GoogleAPIs.com/AJAX/libs/jquery/1.7.1/jquery.min.Js"]];} 但是,我需要执行后台下载,我必须使用NSURLDownloadTask.切换到此时,不会发生缓存行为.
- (voID)downloadUsingNSURLSessionDownloadTask:(NSURL *)url { NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request]; [downloadTask resume];}- (voID)cachedDownloadTaskTest { // This call performs an http request [self downloadUsingNSURLSessionDownloadTask:[NSURL URLWithString:@"http://AJAX.GoogleAPIs.com/AJAX/libs/jquery/1.7.1/jquery.min.Js"]]; [NSThread sleepForTimeInterval:1]; // This call also performs an http request [self downloadUsingNSURLSessionDownloadTask:[NSURL URLWithString:@"http://AJAX.GoogleAPIs.com/AJAX/libs/jquery/1.7.1/jquery.min.Js"]];} 来自Apple的This documentation表示NSURLDownloadTasks不调用URLSession:dataTask:willCacheResponse:completionHandler:delegate方法,因此您的应用程序无法挂钩到缓存生命周期.我的猜测是,这意味着缓存根本不适用于这些任务,但对此并不明确.
For a data task,theNSURLSessionobject calls the delegate’sURLSession:dataTask:willCacheResponse:completionHandler:method. Your
app should then decIDe whether to allow caching. If you do not
implement this method,the default behavior is to use the caching
policy specifIEd in the session’s configuration object.
任何人都可以确认这一预感NSURLSessionDownloadTasks根本不支持缓存吗?是否可以在后台任务中利用Apple的http缓存行为?
解决方法 NSURLSessionDownloadTask使用在应用程序进程外执行下载的系统服务(守护程序)执行工作.因此,实际为下载任务调用的委托回调比NSURLSessionDataTask更受限制.如 Life Cycle of a URL Session中所述,数据任务委托将接收回调以@R_301_6942@缓存行为,而下载任务委托则不会.下载任务应该使用NSURLRequest指定的缓存策略,并且应该使用NSURLSessionConfiguration指定的缓存存储(如果没有,则提交错误).默认缓存策略为NSURLRequestUseProtocolCachePolicy,默认URL缓存存储是非后台和非短暂配置的共享URL缓存. URLSession的委托回调:dataTask:willCacheResponse:completionHandler:不是实际发生的缓存的好指标.
如果使用默认会话配置创建NSURLSessionDownloadTask并且不@R_301_6942@NSURLRequests的缓存策略,则缓存已经发生.
总结以上是内存溢出为你收集整理的我可以在iOS上使用NSURLSessionDownloadTask进行HTTP缓存吗?全部内容,希望文章能够帮你解决我可以在iOS上使用NSURLSessionDownloadTask进行HTTP缓存吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)