【问题标题】:Empty the cache programmatically in iOS在 iOS 中以编程方式清空缓存
【发布时间】:2013-07-09 00:10:35
【问题描述】:

有没有人碰巧知道如何在我正在开发的 iOS 应用程序进入后台 (applicationDidEnterBackground) 的那一刻清空它的缓存?我已经调查了 NSCache,但我仍然无法理解如何检索缓存以基本上删除/释放它?

【问题讨论】:

  • [myCache removeAllObjects]; 应该可以解决问题。
  • 感谢您的回答。如何声明/获取“myCache”的值?再次感谢
  • 您可以 - 例如 - 将其声明为任何其他属性:@property (strong) NSCache *myCache 并使用与 NSMutableDictionary 几乎相同的方式。这里有一些例子:stackoverflow.com/questions/5755902/how-to-use-nscache

标签: ios caching nscache


【解决方案1】:

你说的是这个吗?

[[NSURLCache sharedURLCache] removeAllCachedResponses];

您还可以修改请求的缓存行为以选择性地缓存响应。如果您偶然使用AFNetworking,则可以使用setCacheResponseBlock。例如。在一个项目中,我将其设置为为所有大型视频和音频文件返回nil。但允许它缓存较小的图像文件。

[streamingOperation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
    return nil; // Ensures we are not unecessarily caching asset data to Cache.db
}];

【讨论】:

  • 你好阿尔菲!不确定这是否对我有用。我唯一需要做的就是当用户在他/她的 iPad 中将应用程序发送到后台时清理缓存。例如,我认为密码和某些数据始终保留在内存中的某个位置(不同于钥匙串包装器),因此出于安全原因,必须删除内存中的这些数据。我还不知道如何通过代码指示我的程序我需要检索缓存中的所有数据并释放它。我自己解释吗?非常感谢您的关注。
  • 是的,此附加信息有助于我更好地理解您的问题。您能否给我一些您想“从内存缓存中清除”的数据示例以及为什么您觉得需要清除它?
  • 如果您特别关心密码在内存中的安全性,我几乎可以肯定任何人都无法从内存中访问此数据(即无需清除/不清除)在意)。如果您将其存储在 NSUserDefaults 中,那将是一个问题。此外,根据您对密码的引用存在的位置,您可以在后台将该属性设置为 nil。
  • 谢谢。我将密码存储在钥匙串包装器中,但要求说不应该从那里删除密码,而是从缓存中删除。这对你 Alfie 有意义吗?
  • 你能给我一个“要求”的链接吗?真的没有意义。钥匙串是安全的,默认情况下被分区为只有您的应用程序可以访问。并且在执行的代码之外无法访问内存中保存的对象。在 NSURLConnection 响应领域之外,我不知道有一个缓存可以保存您在内存中的正常 @properties。
猜你喜欢
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多