如何清除URLSession/URLConfiguration存储的缓存数据?
How to clear cached data stored by URLSession/URLConfiguration?
我正在使用下面的代码通过 URLConfiguration 设置我的 URLSession 的缓存策略。
if appDelegateObj.configuration == nil {
appDelegateObj.configuration = URLSessionConfiguration.default
}
if self.apiType == ServerRequest.API_TYPES_NAME.API1 {
if appDelegateObj.forceReload == true {
appDelegateObj.configuration?.urlCache = nil
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}else{
appDelegateObj.configuration?.requestCachePolicy = .returnCacheDataElseLoad
}
}else{
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}
session = URLSession(configuration: appDelegateObj.configuration!, delegate: nil, delegateQueue: nil)
我遇到的问题是即使在设置
appDelegateObj.configuration?.urlCache = nil
我能够获取新数据的唯一方法是使用
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
我做错了什么?我需要一种方法来清除应用程序的所有缓存数据。
我试过使用
URLCache.shared.removeAllCachedResponses()
但这也行不通。
几点:
- 将 URL 缓存设置为 nil 不会禁用所有缓存。用户仍然可以从代理获取缓存数据。
- 不能保证立即清除缓存。 IIRC,它滞后了几秒钟。
- 即使是即时的,用户仍然可以从代理中获取缓存数据。
简而言之,设置 reloadIgnoringLocalCacheData
是您正在做的事情的正确方法(嗯,真的,NSURLRequestReloadIgnoringLocalAndRemoteCacheData
)。
但是,除非您尝试支持某种奇怪的离线模式,否则您可能不想使用returnCacheDataElseLoad
。该模式忽略了服务器提供的缓存过期时间,您几乎肯定不想这样做。请改用默认策略 (useProtocolCachePolicy
)。
我正在使用下面的代码通过 URLConfiguration 设置我的 URLSession 的缓存策略。
if appDelegateObj.configuration == nil {
appDelegateObj.configuration = URLSessionConfiguration.default
}
if self.apiType == ServerRequest.API_TYPES_NAME.API1 {
if appDelegateObj.forceReload == true {
appDelegateObj.configuration?.urlCache = nil
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}else{
appDelegateObj.configuration?.requestCachePolicy = .returnCacheDataElseLoad
}
}else{
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}
session = URLSession(configuration: appDelegateObj.configuration!, delegate: nil, delegateQueue: nil)
我遇到的问题是即使在设置
appDelegateObj.configuration?.urlCache = nil
我能够获取新数据的唯一方法是使用
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
我做错了什么?我需要一种方法来清除应用程序的所有缓存数据。
我试过使用
URLCache.shared.removeAllCachedResponses()
但这也行不通。
几点:
- 将 URL 缓存设置为 nil 不会禁用所有缓存。用户仍然可以从代理获取缓存数据。
- 不能保证立即清除缓存。 IIRC,它滞后了几秒钟。
- 即使是即时的,用户仍然可以从代理中获取缓存数据。
简而言之,设置 reloadIgnoringLocalCacheData
是您正在做的事情的正确方法(嗯,真的,NSURLRequestReloadIgnoringLocalAndRemoteCacheData
)。
但是,除非您尝试支持某种奇怪的离线模式,否则您可能不想使用returnCacheDataElseLoad
。该模式忽略了服务器提供的缓存过期时间,您几乎肯定不想这样做。请改用默认策略 (useProtocolCachePolicy
)。