首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从NSURLSessionTask禁用缓存

如何从NSURLSessionTask禁用缓存
EN

Stack Overflow用户
提问于 2014-06-20 13:29:02
回答 8查看 33.4K关注 0票数 62

在我的iOS应用程序中,我使用NSURLSessionTask下载json数据到我的应用程序。我发现当我直接从浏览器调用url时,我得到了一个最新的json,当它从应用程序中被调用时,我得到了json的旧版本。

这是缓存造成的吗?如何告诉NSURLSessionTask不要使用缓存。

这是我使用的呼叫:

代码语言:javascript
复制
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

谢谢!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-03-10 15:47:49

如果您读取@runmad中的链接,您可以在流程图中看到,如果文件的头部不变,则在设置cachePolicy时,它仍将使用缓存的版本。

在Swift3中,我不得不这样做才能让它发挥作用:

代码语言:javascript
复制
let config = URLSessionConfiguration.default
config.requestCachePolicy = .reloadIgnoringLocalCacheData
config.urlCache = nil

let session = URLSession(configuration: config)

这得到了一个真正的非缓存版本的文件,这是我需要的带宽估算计算。

票数 86
EN

Stack Overflow用户

发布于 2014-06-20 14:13:22

与使用sharedSession不同,您还可以使用指定默认缓存策略的NSURLSessionConfiguration创建自己的NSURLSessionConfiguration。因此,为会话定义一个属性:

代码语言:javascript
复制
@property (nonatomic, strong) NSURLSession *session;

然后:

代码语言:javascript
复制
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
self.session = [NSURLSession sessionWithConfiguration:configuration];

然后使用该会话的请求将使用该requestCachePolicy

票数 40
EN

Stack Overflow用户

发布于 2019-03-08 10:26:36

Swift 4& 5

我知道已经有一段时间了,但万一将来会有帮助的话。

您还可以使用.ephemeral配置属性URLSession,默认情况下它不保存任何cookie和缓存。

如文件所述,

临时会话配置对象类似于默认会话配置,但相应的会话对象不将缓存、凭据存储或任何与会话相关的数据存储到磁盘。相反,与会话相关的数据存储在RAM中。

因此,您的代码可能如下所示:

代码语言:javascript
复制
let configuration = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: configuration)
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24328461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档