0

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

在这篇文章的帮助下,我可以从服务器中删除与 URL 对应的本地磁盘中存储的文件。这将从该沙盒位置清除数据:“库/缓存/Three20”。

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

“库/Caches/com.yourcompany.yourapp/Cache.db” “库/Caches/com.yourcompany.yourapp/Cache.db-shm” “库/Caches/com.yourcompany.yourapp/Cache.db-wal”

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

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

任何线索将不胜感激。

4

2 回答 2

1

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

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

在URL 加载系统编程指南中查找有关此缓存的更多信息

于 2013-09-11T17:02:27.957 回答
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. 清除 Restkit 缓存:(来自 Restkit 的作者:https ://stackoverflow.com/a/7230083/260665 )它从“ Library/Caches/RKClientRequestCache-youapp.com/PermanentStore ”和“ Library/Caches/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];
    
于 2013-09-12T02:56:00.650 回答