【发布时间】:2014-07-11 23:56:28
【问题描述】:
在我的 iPhone 应用程序中,我正在缓存一些压缩文件的原始数据以节省加载时间。但这些文件可能会在更新中发生变化。
当应用更新时,iOS 会为我清除 /Library/Caches 还是我需要自己清除?
【问题讨论】:
标签: iphone filesystems
在我的 iPhone 应用程序中,我正在缓存一些压缩文件的原始数据以节省加载时间。但这些文件可能会在更新中发生变化。
当应用更新时,iOS 会为我清除 /Library/Caches 还是我需要自己清除?
【问题讨论】:
标签: iphone filesystems
短:
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
【讨论】:
为了安全起见,您应该自己清除它。似乎没有任何文件表明它会为您清除,因此即使现在可以清除,您也不能指望它会继续这样做。
【讨论】:
如果 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);
}
}
}
}
【讨论】:
这取决于你!引用来自 Apple 的documentation:
使用此目录编写任何特定于应用程序的支持文件 您希望在应用程序启动之间或在 应用程序更新。您的应用程序通常负责 添加和删除这些文件。它也应该能够重新创建 这些文件是必要的,因为 iTunes 会在一个完整的过程中删除它们 设备的恢复。在 iOS 2.2 及更高版本中,此内容 iTunes 不备份目录。
【讨论】:
/Caches 的全部意义在于系统可以随时清除存储在那里的数据——如果需要的话。您不必担心清除该目录。
【讨论】: