2011-08-23 83 views

回答

46

簡稱:

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 
0

/Caches的要點是系統可以隨時清除存儲在那裏的數據 - 如果需要的話。你不應該擔心清理那個目錄。

+0

如果系統更新之前清除緩存,有沒問題。問題是,如果更新後緩存不清晰,則某些緩存的文件可能已更改,並且舊文件仍將被使用。 – fbafelipe

+0

如果您以某種方式將應用程序版本號與緩存文件相關聯,則這不是問題。 –

9

爲了安全起見,您應該自己清除它。似乎沒有任何文件說明它會被清除,所以即使現在它已經做到了,你也不能指望它繼續這樣做。

+0

其實,daveoncode(下)發現了蘋果的一些文檔。但建議本身仍然很好。 – picciano

+0

@picciano:該文檔沒有說明Apple是否可以在升級應用程序時清除緩存。它只是說你的應用程序「通常」負責管理文件,並指定一次文件實際被刪除。 – Anomie

2

這取決於你!從蘋果公司的documentation報價:

使用此目錄寫你想要的應用程序或在 應用程序更新發布之間保持的任何應用程序特定的支持文件 。您的應用程序通常負責 添加和刪除這些文件。它還應該能夠根據需要重新創建 這些文件,因爲iTunes在設備的完整恢復過程中將其刪除。在iOS 2.2和更高版本中,此 目錄的內容不由iTunes備份。

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); 
      } 
     } 
    } 

} 
+0

非常簡單和好的代碼,我適用於我的.zip文件中的緩存目錄 – BlackSheep

相關問題