【问题标题】:Will <Application_Home>/Library/Caches be clear on app update?<Application_Home>/Library/Caches 会在应用更新时明确吗?
【发布时间】:2014-07-11 23:56:28
【问题描述】:

在我的 iPhone 应用程序中,我正在缓存一些压缩文件的原始数据以节省加载时间。但这些文件可能会在更新中发生变化。

当应用更新时,iOS 会为我清除 /Library/Caches 还是我需要自己清除?

【问题讨论】:

    标签: iphone filesystems


    【解决方案1】:

    短:

    Will iOS clear /Library/Caches for me when the app is updated 没有

    iOS 是否有可能在更新期间清除 Application_Home/Library/Caches 的所有内容或部分内容? 是的

    or I need to clear it myself?你需要确保你要清除的东西被清除了。

    为这两种情况做好准备。

    您如何知道您的应用是否已更新?见iOS Application Update Test

    长:

    应用程序更新期间保存的文件 当用户下载 应用程序更新,iTunes 会在新应用程序中安装更新 目录。然后它将用户的数据文件从旧的 在删除之前安装到新的应用程序目录 旧安装。以下目录中的文件保证 在更新过程中被保留:

    • Application_Home/文档
    • Application_Home/库

    虽然其他用户目录中的文件也可能被移动,但你 不应依赖它们在更新后出现。

    来自 Apple 文档:The Application Runtime Environment - Backup and Restore

    Application_Home/Library/Caches 使用这个目录写任何 您希望在它们之间保留的特定于应用程序的支持文件 启动应用程序或在应用程序更新期间。您的 应用程序通常负责添加和删除这些 文件。它还应该能够根据需要重新创建这些文件 因为 iTunes 在设备的完全恢复过程中会删除它们。 在 iOS 2.2 及更高版本中,不备份此目录的内容 通过 iTunes。

    来自 Apples 文档:The Application Runtime Environment - The File System (daveoncode)

    这是一个在“更新”期间清除缓存的示例: 您安装应用程序 X V1.0。吃一次午餐,然后开始做其他事情。 iOS出现故障,需要恢复。开发人员发布 V1.1。您在 Mac 上的 iTunes 中更新应用程序。您通过 iTunes 恢复您的设备。 iTunes 安装 V1.1。用户午餐你的应用程序。您的应用不会收到任何此类事情发生的通知,但 Application_Home/Library/Cache 中的所有文件都已消失 (iTunes removes them during a full restoration of the device)。

    里面有非常重要的信息:It should also be able to re-create these files as needed。就像 Kendall 也指出它是一个缓存,因此操作系统可以随时从其中删除文件。因此,每次您从 Application_Home/Library/Caches 加载任何文件时,您都必须考虑该文件不再存在的情况(Kendall 谈到了这一点)。

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    if(![fileManager fileExistsAtPath:[cachePath stringByAppendingPathComponent:@"myfile.zip"]]) {
        //create it, copy it from app bundle, download it etc.
    }
    //start using it
    

    【讨论】:

      【解决方案2】:

      为了安全起见,您应该自己清除它。似乎没有任何文件表明它会为您清除,因此即使现在可以清除,您也不能指望它会继续这样做。

      【讨论】:

      • 实际上,daveoncode(下)从 Apple 找到了一些文档。但是推荐本身还是不错的。
      • @picciano:该文档没有说明 Apple 是否会在升级应用程序时清除缓存。它只是说您的应用“通常”负责管理文件,并指定文件实际被删除的时间。
      【解决方案3】:

      如果 iOS 空间不足,缓存目录将被清除。如果用户从应用商店选项中选择“全部更新”,则很可能空间不足。

      您应该只将文件存储在 Caches 目录中,前提是它们可以由您的应用重新创建。据我了解,iOS7 中的媒体播放器只会播放存储在缓存目录中的视频,以下是我手动清除它们的方法(以防万一):

      -(void)deleteAllVideos
      {
          NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
      
      
          NSFileManager* fileManager = [NSFileManager defaultManager];
          NSArray *directoryContent = [fileManager contentsOfDirectoryAtPath:cachePath error:NULL];
      
          NSError* error;
          NSString* fullFilePath = nil;
      
          for(NSString* fileName in directoryContent)
          {
              if([fileName hasSuffix:@".mp4"])
              {
      
                  fullFilePath = [cachePath stringByAppendingPathComponent:fileName];
                  [fileManager removeItemAtPath:fullFilePath error:&error];
      
                  if(error)
                  {
                      DLog(@"Error: %@",error);
                  }
              }
          }
      
      }
      

      【讨论】:

      • 非常简单又好用的代码,我应用在我的 .zip 文件的缓存目录中
      【解决方案4】:

      这取决于你!引用来自 Apple 的documentation

      使用此目录编写任何特定于应用程序的支持文件 您希望在应用程序启动之间或在 应用程序更新。您的应用程序通常负责 添加和删​​除这些文件。它也应该能够重新创建 这些文件是必要的,因为 iTunes 会在一个完整的过程中删除它们 设备的恢复。在 iOS 2.2 及更高版本中,此内容 iTunes 不备份目录。

      【讨论】:

        【解决方案5】:

        /Caches 的全部意义在于系统可以随时清除存储在那里的数据——如果需要的话。您不必担心清除该目录。

        【讨论】:

        • 如果系统在更新前清除缓存,则没有问题。问题是,如果更新后缓存不清除,可能缓存的部分文件发生了变化,还是会使用旧文件。
        • 如果您以某种方式将应用版本号与缓存文件相关联,这不是问题。
        猜你喜欢
        • 2016-12-13
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 2014-08-30
        相关资源
        最近更新 更多