晴朗20& Restkit缓存信息以释放磁盘空间

时间:2013-09-11 16:16:05

标签: iphone cocoa-touch three20

我从服务器中的图像下载了一些文件。这些下载的文件使用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的位置以及我应该在哪里清除其中的信息。

任何线索都会非常感激。

2 个答案:

答案 0 :(得分:1)

Cache.db是Apples URL加载系统使用的缓存。没有记录它是如何工作的,但是认为这个缓存会自己管理它的大小是合理的。

即使您从Three20的缓存中删除文件,它们仍然存在于URL加载系统缓存中,从那里提供,然后读回到Three20的缓存。

URL Loading System Programming Guide

中详细了解此缓存

答案 1 :(得分:1)

根据tonklon的回答和我的研究,我知道是NSURLCache正在缓存URL的响应。图中还有Restkit的“永久存储”数据,也需要清除。因此,遵循三个确保我们清除数据(选择性地):

  1. 有选择地仅针对您不希望沙箱中的缓存信息的节点清除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”];

  2. Clear Restkit缓存:(来自Restkit的作者:https://stackoverflow.com/a/7230083/260665) 它清除“ Library / Caches / RKClientRequestCache-youapp.com / PermanentStore ”中的数据& “的库/缓存/ RKClientRequestCache-yourapp.com / SessionStore

    [[RKClient sharedClient].requestCache invalidateAll];
    
  3. 清除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];