我从服务器中的图像下载了一些文件。这些下载的文件使用TTURLCache进行缓存。在一段时间内,应用程序消耗的磁盘空间可能会增长。出于同样的原因,应用程序设置中有一项功能可以有选择地清除缓存的信息。
使用帮助of this post我可以删除与服务器URL对应的本地磁盘中存储的文件。这将清除此沙箱位置的数据:“Library / Caches / Three20”。
但是,我观察到如果我切换到离线模式,应用程序仍然可以提取远程资源并呈现数据。此外,它将文件添加回“Library / Caches / Three20”位置,即使没有互联网连接!经过进一步审查,我发现有一个缓存数据库,从中获取请求:
“库/缓存/ com.yourcompany.yourapp / Cache.db” “图书馆/缓存/ com.yourcompany.yourapp / Cache.db-SHM” “库/缓存/ com.yourcompany.yourapp / Cache.db-沃尔玛”
一切都很好,所以我测试了除了从“Library / Caches / Three20”位置有选择地清除文件之外,我必须有选择地从db中删除数据库条目:“Library / Caches / com.yourcompany.yourapp / Cache.db“,”Library / Caches / com.yourcompany.yourapp / Cache.db-shm“& “库/缓存/ com.yourcompany.yourapp / Cache.db-沃尔玛”。
我检查了代码,但是我找不到确切的数据写入Cache.db的位置以及我应该在哪里清除其中的信息。
任何线索都会非常感激。
答案 0 :(得分:1)
Cache.db是Apples URL加载系统使用的缓存。没有记录它是如何工作的,但是认为这个缓存会自己管理它的大小是合理的。
即使您从Three20的缓存中删除文件,它们仍然存在于URL加载系统缓存中,从那里提供,然后读回到Three20的缓存。
中详细了解此缓存答案 1 :(得分:1)
根据tonklon的回答和我的研究,我知道是NSURLCache正在缓存URL的响应。图中还有Restkit的“永久存储”数据,也需要清除。因此,遵循三个确保我们清除数据(选择性地):
有选择地仅针对您不希望沙箱中的缓存信息的节点清除Three20缓存文件(来自https://stackoverflow.com/a/5161356/260665): 它清除“ Library / Caches / Three20 ”
中的数据[[TTURLCache sharedCache] removeURL:@“http://example.com/an_image.jpg” fromDisk:YES]; [[TTURLCache sharedCache] invalidateURL:@ “http://example.com/an_image.jpg”];
Clear Restkit缓存:(来自Restkit的作者:https://stackoverflow.com/a/7230083/260665) 它清除“ Library / Caches / RKClientRequestCache-youapp.com / PermanentStore ”中的数据& “的库/缓存/ RKClientRequestCache-yourapp.com / SessionStore 强>”
[[RKClient sharedClient].requestCache invalidateAll];
清除NSURLCache信息。它清除“ Library / Caches / com.yourcompany.yourapp / Cache.db-wal ”(http://twobitlabs.com/2012/01/ios-ipad-iphone-nsurlcache-uiwebview-memory-utilization/)
中的数据[[NSURLCache sharedURLCache] removeAllCachedResponses]; NSUInteger originalDiskCapacity = [[NSURLCache sharedURLCache] diskCapacity]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; [[NSURLCache sharedURLCache] setDiskCapacity:originalDiskCapacity];