在我的iPhone應用程序中,我正在緩存一些壓縮文件的原始數據以節省加載時間。但是這些文件可能會在更新中更改。在應用程序更新時,<Application_Home>/Library/Caches會被清除嗎?
當應用程序更新或者我需要自己清除時,iOS會清除/庫/緩存嗎?
在我的iPhone應用程序中,我正在緩存一些壓縮文件的原始數據以節省加載時間。但是這些文件可能會在更新中更改。在應用程序更新時,<Application_Home>/Library/Caches會被清除嗎?
當應用程序更新或者我需要自己清除時,iOS會清除/庫/緩存嗎?
簡稱:
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 /庫
雖然在其他用戶目錄中的文件也可以被移動過,你 不應該依賴它們在更新後存在。
從蘋果文檔:The Application Runtime Environment - Backup and Restore
APPLICATION_HOME /圖書館/緩存使用此目錄寫你想要的應用程序的 發佈會或之間保持的任何 應用程序特定的支持文件在應用程序更新。您的 應用程序通常負責添加和刪除這些 文件。它還應該能夠根據需要重新創建這些文件 ,因爲iTunes在完全恢復設備期間將其刪除。 在iOS 2.2及更高版本中,此目錄的內容不會由iTunes備份到 。
從蘋果文檔: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
加載任何文件時,都必須考慮文件不存在的情況(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
/Caches的要點是系統可以隨時清除存儲在那裏的數據 - 如果需要的話。你不應該擔心清理那個目錄。
這取決於你!從蘋果公司的documentation報價:
使用此目錄寫你想要的應用程序或在 應用程序更新發布之間保持的任何應用程序特定的支持文件 。您的應用程序通常負責 添加和刪除這些文件。它還應該能夠根據需要重新創建 這些文件,因爲iTunes在設備的完整恢復過程中將其刪除。在iOS 2.2和更高版本中,此 目錄的內容不由iTunes備份。
如果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文件中的緩存目錄 – BlackSheep
如果系統更新之前清除緩存,有沒問題。問題是,如果更新後緩存不清晰,則某些緩存的文件可能已更改,並且舊文件仍將被使用。 – fbafelipe
如果您以某種方式將應用程序版本號與緩存文件相關聯,則這不是問題。 –