在我的iPhone应用程序中,我正在缓存一些压缩文件的原始数据以节省加载时间。但这些文件可能会在更新中发生变化。
当应用更新或我需要自行清除时,iOS会清除/库/缓存吗?
答案 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的重点是系统可以随时清除存储在那里的数据 - 如果需要的话。您不必担心清除该目录。