是否可以阻止NSURLRequest缓存数据或在请求后删除缓存数据?

在iPhone上,我使用NSURLRequest对一大块数据执行HTTP请求。对象分配峰值,我相应地分配数据。当我完成数据后,我会相应地释放它 - 但是仪器没有显示任何已释放的数据!


我的理论是,默认情况下,HTTP请求被缓存,但我不希望我的iPhone应用程序缓存这些数据。


有没有办法在请求后清除此缓存或阻止任何数据首先被缓存?


我尝试过使用下面记录的所有缓存策略:


NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];

theRequest.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

但似乎没有什么可以释放记忆!


皈依舞
浏览 607回答 3
3回答

江户川乱折腾

通常,更容易创建这样的请求NSURLRequest *request = [NSURLRequest requestWithURL:url      cachePolicy:NSURLRequestReloadIgnoringCacheData      timeoutInterval:60.0];然后创建连接NSURLConnection *conn = [NSURLConnection connectionWithRequest:request       delegate:self];并在委托上实现连接:willCacheResponse:方法。刚刚返回nil应该这样做。- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {  return nil;}

HUH函数

如果你正在使用NSURLSession,另一个防止Cache.db在app的Caches目录中创建写入iOS的请求和参数的解决方案是将会话NSURLCache的配置设置为0大小的内存和0大小的磁盘缓存,例如let configuration = URLSessionConfiguration.default    configuration.urlCache = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)let session = URLSession(configuration: configuration)或者如上所述设置在全局缓存级别URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)据推测,磁盘大小为0会阻止iOS写入磁盘,但如果你有策略,reloadIgnoringLocalCacheData那么你可能对内存缓存也不感兴趣。注意这将阻止任何Caches/Cache.db(请求和响应)或Caches/fsCachedData/文件夹(响应数据)的创建。我们决定出于安全目的在应用程序中采用这种方法,因为我们不希望我们的请求永远存储在磁盘缓存中。如果有人知道有一种方法可以停止请求缓存,但保持从iOS URL加载机制缓存响应数据,我有兴趣知道。(根据我的判断,没有关于此的API或官方文档)
打开App,查看更多内容
随时随地看视频慕课网APP