应用程序更新</application_home>上会清楚<application_home> / Library / Caches吗?

时间:2011-08-23 03:28:36

标签: iphone filesystems

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

当应用更新或我需要自行清除时,iOS会清除/库/缓存吗?

5 个答案:

答案 0 :(得分:48)

<强>短

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 /库
  •   
     

虽然其他用户目录中的文件也可以移动,但是   更新后不应该依赖他们在场。

来自Apples文档: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。像肯德尔一样也指出它是一个缓存,因此操作系统可以随时从中删除文件。因此,每次从Application_Home/Library/Caches加载任何文件时,您都必须考虑该文件不再存在的情况(肯德尔对此有所了解)。

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

答案 1 :(得分:10)

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

答案 2 :(得分:4)

如果iOS空间不足,将清除caches目录。如果用户选择&#34;更新全部&#34;从应用程序商店选项中,它们很可能会用完空间。

如果应用程序可以重新创建文件,则只应将文件存储在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);
            }
        }
    }

}

答案 3 :(得分:3)

取决于你!引用Apple的documentation

  

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

答案 4 :(得分:1)

/ Caches的重点是系统可以随时清除存储在那里的数据 - 如果需要的话。您不必担心清除该目录。