好的應用應該在系統記憶體警告情況下釋放一些可以重新建立的資源。在iOS中我們可以在應用程式委派物件、視圖控制器以及其它類中獲得系統記憶體警告訊息。
1、應用程式委派物件
在應用程式委派物件中接收記憶體警告訊息,需要重寫applicationDidReceiveMemoryWarning:方法。AppDelegate的程式碼片段:
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { NSLog(@”AppDelegate中調用applicationDidReceiveMemoryWarning:”); }
2、視圖控制器
在視圖控制器中接收記憶體警告訊息,需要重寫didReceiveMemoryWarning方法。ViewController的程式碼片段:
- (void)didReceiveMemoryWarning { NSLog(@”ViewController中didReceiveMemoryWarning調用”); [super didReceiveMemoryWarning]; //釋放成員變數 [_listTeams release]; }
注意釋放資原始碼應該放在[super didReceiveMemoryWarning]語句下面。
3、其它類
在其它類中可以使用通知,在記憶體警告時候iOS系統會發出 UIApplicationDidReceiveMemoryWarningNotification通知,凡是在通知中樞註冊了 UIApplicationDidReceiveMemoryWarningNotification通知的類都會接收到記憶體警告通知。 ViewController的程式碼片段:
- (void)viewDidLoad { [super viewDidLoad]; NSBundle *bundle = [NSBundle mainBundle]; NSString *plistPath = [bundle pathForResource:@"team" ofType:@"plist"]; //擷取屬性列表檔案中的全部資料 NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath]; self.listTeams = array; [array release]; //接收記憶體警告通知,調用handleMemoryWarning方法處理 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(handleMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; } //處理記憶體警告 -(void) handleMemoryWarning { NSLog(@”ViewController中handleMemoryWarning調用“); }
我們在viewDidLoad方法中註冊UIApplicationDidReceiveMemoryWarningNotification消 息,接收到警示資訊調用handleMemoryWarning方法。這些代碼完全可以寫在其它類中,在ViewController中重寫 didReceiveMemoryWarning方法就可以了,本例這是示意性介紹一下 UIApplicationDidReceiveMemoryWarningNotification警示訊息。
記憶體警告在裝置上出現並不是經常的,一般我們沒有辦法類比,但模擬器上有一個功能可以類比記憶體警告,啟動模擬器,選擇模擬器菜單硬體→類比記憶體警告,這個時候我們會在輸出視窗中看到記憶體警告發生了。
2012-11-06 16:49:16.419 RespondMemoryWarningSample[38236:c07] Received memory warning.
2012-11-06 16:49:16.422 RespondMemoryWarningSample[38236:c07] AppDelegate中調用applicationDidReceiveMemoryWarning:
2012-11-06 16:49:16.422 RespondMemoryWarningSample[38236:c07] ViewController中handleMemoryWarning調用
2012-11-06 16:49:16.423 RespondMemoryWarningSample[38236:c07] ViewController中didReceiveMemoryWarning調用
本文出自 “關東升” 部落格,請務必保留此出處http://2009315319.blog.51cto.com/701759/1133367