Iphone 清除三个20&;Restkit缓存信息以释放磁盘内存空间

Iphone 清除三个20&;Restkit缓存信息以释放磁盘内存空间,iphone,cocoa-touch,three20,Iphone,Cocoa Touch,Three20,除了服务器中的图像外,我下载了一些文件。这些下载的文件使用TTURLCache进行缓存。在一段时间内,应用程序消耗的磁盘空间可能会增加。出于同样的原因,应用程序的设置中有一个功能可以选择性地清除缓存的信息 在帮助下,我能够从服务器上删除本地磁盘中与URL对应的存储文件。这将清除此沙箱位置中的数据:“Library/Caches/Three20” 但是,我观察到,如果切换到脱机模式,应用程序仍然能够提取远程资源并呈现数据。此外,即使没有互联网连接,它也会将文件添加回“Library/Caches/

除了服务器中的图像外,我下载了一些文件。这些下载的文件使用TTURLCache进行缓存。在一段时间内,应用程序消耗的磁盘空间可能会增加。出于同样的原因,应用程序的设置中有一个功能可以选择性地清除缓存的信息

在帮助下,我能够从服务器上删除本地磁盘中与URL对应的存储文件。这将清除此沙箱位置中的数据:“Library/Caches/Three20”

但是,我观察到,如果切换到脱机模式,应用程序仍然能够提取远程资源并呈现数据。此外,即使没有互联网连接,它也会将文件添加回“Library/Caches/Three20”位置!在进一步检查后,我发现有一个缓存数据库,从中获取请求:

“Library/Caches/com.yourcompany.yourapp/Cache.db” “Library/Caches/com.yourcompany.yourapp/Cache.db shm” “Library/Caches/com.yourcompany.yourapp/Cache.db”

很好,所以我测试了一下,除了有选择地从“Library/Caches/Three20”位置清除文件外,我还必须有选择地从数据库中删除数据库条目:“Library/Caches/com.yourcompany.yourapp/Cache.db”、“Library/Caches/com.yourcompany.yourapp/Cache.db shm”和“Library/Caches/com.yourcompany.yourapp/Cache.db”

我检查了代码,但找不到数据写入Cache.db的确切位置以及清除其中信息的位置


任何潜在客户都将不胜感激。

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

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


中找到有关此缓存的更多信息基于tonklon的回答和我的更多研究,我知道是NSURLCache缓存了URL的响应。图片中还有一个Restkit的“永久存储”数据,该数据也必须清除。因此,以下三点确保我们(有选择地)清除数据:

  • 仅针对不再希望在沙箱中为其缓存信息的节点(从)有选择地清除320个缓存文件: 它从“库/缓存/Three20”中清除数据

    [[TTURLCache sharedCache]移除URL:@“” fromDisk:是];[[TTURLCache sharedCache] 无效欧元:@“]

  • 清除Restkit缓存:(来自Restkit的作者:) 它从“库/Caches/RKClientRequestCache youapp.com/PermanentStore”和“库/Caches/RKClientRequestCache youapp.com/SessionStore”中清除数据

  • 清除NSURLCache信息。它从“库/Caches/com.yourcompany.yourapp/Cache.db wal”中清除数据()


  • 是的,你是对的,我在回答中还补充了更多细节。如果我是对的,请复习一下。这对我来说似乎是对的。但是您是否考虑过完全禁用NSURLCache?如果您使用的是Three20和RestKit的缓存,那么应该这样做。我正在清除NSURLCache的内容,因为我观察到所有的数据都仍然存在于NSURLCache中。即使我从缓存中删除了文件,也没有什么区别,因为所有数据都已缓存。清除NSURLCache后,我可以看到所有数据都被擦除了。然而,我正在重新设置“原始磁盘容量”,这似乎没有产生任何影响。我发现数据不再缓存在“Cache.db wal”文件中。你知道吗?
    [[RKClient sharedClient].requestCache invalidateAll];
    
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    NSUInteger originalDiskCapacity = [[NSURLCache sharedURLCache] diskCapacity];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];
    [[NSURLCache sharedURLCache] setDiskCapacity:originalDiskCapacity];