2011-03-23 58 views
1

我已經創建了一個應用程序,我將從服務器下載圖像並將其存儲在本地iPhone的文件系統上。它發生得很好。現在的問題是,當我退出我的應用程序時,我想清除iPhone上的本地緩存圖像。以編程方式清除iPhone上的二級緩存

如何刪除iPhone上的緩存圖像。它使用iPhone上的輔助內存,如何以編程方式訪問它?

謝謝您提前。 Suse。

+0

「輔助存儲器」?如果我們要理解您的問題,您必須使用與其他人相同的條款。 iPhone沒有「次要記憶」之類的東西。你是什​​麼意思? – occulus 2011-03-23 09:33:19

+0

你是什麼意思的次要記憶?你如何存儲下載的圖像? – robertvojta 2011-03-23 09:39:23

+0

我的意思是iPhone上的永久存儲。它的文件存儲在iPhone上的位置。我正在使用NSPathUtilities庫來實現此目的。 – suse 2011-03-23 09:45:56

回答

3

在applicationWillTerminate方法中清理它們。

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    NSArray *imagesFiles = [fileManager contentsOfDirectoryAtPath:saveDirectory error:error]; 
    for (NSString *file in imagesFiles) { 
     error = nil; 
     [fileManager removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:error]; 
     /* do error handling here */ 
    } 
} 
+2

我會通過GCD在塊中完成runnig。 – rckoenes 2011-03-23 10:13:10

+1

使用applicationWillTerminate在iOS4 +上使用多任務處理並不是一個很好的策略。此方法通常不會被調用 - 應用程序將是後臺,如果運行其他應用程序,則可從內存中轉儲,而不會調用applicationWillTerminate。請參閱http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/上的流程圖 – occulus 2011-03-23 11:44:21

4

我的答案是按照Kirky Todds,但不使用applicationWillTerminate - 它不是的iOS4 +多任務處理一個很好的策略,因爲這種方法往往不會被調用 - 應用程序會背景,如果其他應用程序正在運行(或電話已關閉/重新啓動),則可以從內存中轉儲數據,但不會調用applicationWillTerminate。 (或者它將再次被預先登陸,無論哪種方式,你的緩存都不會被清除)。

而是考慮在啓動時(applicationDidFinishLaunching)或applicationWillEnterForeground清除。後者往往會更頻繁地被調用,因爲前者只會被調用一個實際的應用程序lauch(而不是從後臺開始的簡歷)。

有關backgrounding和生成的事件的詳細信息,請參閱:

http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

相關問題