【问题标题】:How can we clear the cached images when we clos the app?当我们关闭应用程序时,我们如何清除缓存的图像?
【发布时间】:2010-12-24 19:19:20
【问题描述】:

我使用以下代码将图像缓存到我的应用程序的文档目录中。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveDirectory = [paths objectAtIndex:0];

但即使我关闭了应用程序,它仍然存在。当我丢失我的应用程序时如何清除它。我在我的模拟器中做这一切。

【问题讨论】:

    标签: iphone caching uiimage


    【解决方案1】:

    使用本题中指定的临时目录路径:

    How can I get a writable path on the iPhone?

    【讨论】:

      【解决方案2】:
      NSString *file;
      NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:saveDirectory];
      NSError* err;
      while (file = [dirEnum nextObject]) {
          err = nil;
          [[NSFileManager defaultManager] removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:&err]];
          if(err){
              //print some errror message
          }
      }
      

      【讨论】:

      • 好一个。也会试试这个。
      【解决方案3】:

      如果您不希望在应用程序关闭后保留缓存的图像,最好将它们保存到临时目录 - 它们将被自动删除。

      如果要手动删除文件,则必须存储它们的路径并使用以下 NSFileManager 函数:

      - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error
      

      编辑:抱歉,关于自动删除,我似乎错了。以下是《开发指南》中的一句话:
      使用此目录来编写您不需要在应用程序启动之间保留的临时文件。当您的应用程序确定不再需要这些文件时,应从该目录中删除这些文件。 (当您的应用程序未运行时,系统也可能会从该目录中清除延迟文件。)

      【讨论】:

      • 但是如何让我的文件保存到临时目录?
      • NSString *saveDirectory = NSTemporaryDirectory();然后像保存任何其他路径一样将文件保存在那里。
      • 我一直在尝试这个直到现在。但是当我关闭应用程序时它不会被删除。它仍然存在。
      • 我的猜测是,当操作系统需要更多空间时(或重启手机后),它们将被删除。这只是意味着您可以忽略它们,如果您想确保它们实际上已被删除,您需要按照其他回复中的建议执行类似的操作。
      • 模拟器永远不会删除临时路径中的文件,因为它不需要。该设备最终会在需要时提供。
      【解决方案4】:

      我会在我的应用程序委托中实现 applicationWillTerminate: 并删除那里的缓存文件。或者更好的是,按照 Vladimir 的建议,将它们保存在一个临时目录中,并让操作系统在需要时清理它们。

      - (void)applicationWillTerminate:(UIApplication *)app
      {
          NSFileManager *fileManager = [NSFileManager defaultManager];
          NSError *error;
          NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:saveDirectory error:error];
          for (NSString *file in cacheFiles) {
              error = nil;
              [fileManager removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:error];
              /* handle error */
          }
      }
      

      【讨论】:

      • 临时目录是指应用程序的应用程序支持文件夹中的 tmp 吗?如果是这样,我该如何访问它? NSDcocumentDirectory 将获取文档文件夹。
      • 我的意思是上面建议的 NSTemporaryDirectory() 。在那里就您关于为什么没有删除内容的问题进行了答复。
      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多