为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2019-09-20 14:34:00
在iPhone上,我使用NSURLRequest对一大块数据执行HTTP请求。对象分配峰值,我相应地分配数据。当我完成数据后,我会相应地释放它 - 但是仪器没有显示任何已释放的数据!我的理论是,默认情况下,HTTP请求被缓存,但我不希望我的iPhone应用程序缓存这些数据。有没有办法在请求后清除此缓存或阻止任何数据首先被缓存?我尝试过使用下面记录的所有缓存策略:NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];theRequest.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;但似乎没有什么可以释放记忆!
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

通常,更容易创建这样的请求


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;

}


查看完整回答
反对 回复 2019-09-20
?
HUH函数

TA贡献1836条经验 获得超4个赞

如果你正在使用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或官方文档)


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 627 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信