我已經創建了一個應用程序,我將從服務器下載圖像並將其存儲在本地iPhone的文件系統上。它發生得很好。現在的問題是,當我退出我的應用程序時,我想清除iPhone上的本地緩存圖像。以編程方式清除iPhone上的二級緩存
如何刪除iPhone上的緩存圖像。它使用iPhone上的輔助內存,如何以編程方式訪問它?
謝謝您提前。 Suse。
我已經創建了一個應用程序,我將從服務器下載圖像並將其存儲在本地iPhone的文件系統上。它發生得很好。現在的問題是,當我退出我的應用程序時,我想清除iPhone上的本地緩存圖像。以編程方式清除iPhone上的二級緩存
如何刪除iPhone上的緩存圖像。它使用iPhone上的輔助內存,如何以編程方式訪問它?
謝謝您提前。 Suse。
在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 */
}
}
我會通過GCD在塊中完成runnig。 – rckoenes 2011-03-23 10:13:10
使用applicationWillTerminate在iOS4 +上使用多任務處理並不是一個很好的策略。此方法通常不會被調用 - 應用程序將是後臺,如果運行其他應用程序,則可從內存中轉儲,而不會調用applicationWillTerminate。請參閱http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/上的流程圖 – occulus 2011-03-23 11:44:21
我的答案是按照Kirky Todds,但不使用applicationWillTerminate
- 它不是的iOS4 +多任務處理一個很好的策略,因爲這種方法往往不會被調用 - 應用程序會背景,如果其他應用程序正在運行(或電話已關閉/重新啓動),則可以從內存中轉儲數據,但不會調用applicationWillTerminate
。 (或者它將再次被預先登陸,無論哪種方式,你的緩存都不會被清除)。
而是考慮在啓動時(applicationDidFinishLaunching
)或applicationWillEnterForeground
清除。後者往往會更頻繁地被調用,因爲前者只會被調用一個實際的應用程序lauch(而不是從後臺開始的簡歷)。
有關backgrounding和生成的事件的詳細信息,請參閱:
http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/
「輔助存儲器」?如果我們要理解您的問題,您必須使用與其他人相同的條款。 iPhone沒有「次要記憶」之類的東西。你是什麼意思? – occulus 2011-03-23 09:33:19
你是什麼意思的次要記憶?你如何存儲下載的圖像? – robertvojta 2011-03-23 09:39:23
我的意思是iPhone上的永久存儲。它的文件存儲在iPhone上的位置。我正在使用NSPathUtilities庫來實現此目的。 – suse 2011-03-23 09:45:56