nkp*_*nkp 17 caching objective-c nsurlcache ios ios8
这是我需要清除缓存并对URL进行新调用时调用的示例函数
- (void)clearDataFromNSURLCache:(NSString *)urlString
{
NSURL *requestUrl = [NSURL URLWithString:urlString];
NSURLRequest *dataUrlRequest = [NSURLRequest requestWithURL: requestUrl];
NSURLCache * cache =[NSURLCache sharedURLCache];
NSCachedURLResponse* cacheResponse =[cache cachedResponseForRequest:dataUrlRequest];
if (cacheResponse) {
NSString* dataStr = [NSString stringWithUTF8String:[[cacheResponse data] bytes]];
NSLog(@"data str r= %@",dataStr);
NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]);
[cache storeCachedResponse:nil forRequest:dataUrlRequest];
[NSURLCache setSharedURLCache:cache];
}
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:dataUrlRequest];
//Check if the respnase data has been removed/deleted from cache
NSURLRequest *finalRequestUrlRequest = [NSURLRequest requestWithURL:requestUrl];
NSURLCache * finalCache =[NSURLCache sharedURLCache];
NSCachedURLResponse* finalcacheResponse =[finalCache cachedResponseForRequest:finalRequestUrlRequest];
if (finalcacheResponse) {
//Should not enter here
NSString* finaldataStr = [NSString stringWithUTF8String:[[finalcacheResponse data] bytes]];
NSLog(@"data str r= %@",finaldataStr);
NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]);
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 6/7中,requestURL的响应被成功删除,但在iOS 8中它永远不会被删除.我已搜索但无法找到原因,这在iOS8中不起作用.
任何帮助将不胜感激…..
Air*_*Ltd 21
NSURLCache在iOS 8.0.x上被破坏 - 它根本不会清除缓存,因此它会不受限制地增长.有关详细调查,请参见http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/.缓存清除被固定在8.1测试版-但是removeCachedResponseForRequest:是不是.
removeCachedResponsesSinceDate: 确实可以在iOS 8.0上运行 - 一个为8.0添加的API,但尚未进入文档(它在API差异中).我不清楚它对任何人有什么用 - 当然你通常想做的是在特定日期之前删除缓存的响应.
removeAllCachedResponses 同样有效 - 但这是一个真正的大锤解决方案.
| 归档时间: |
|
| 查看次数: |
4839 次 |
| 最近记录: |