iOS6記憶體警告處理

2021-07-03 02:23:22 字數 1981 閱讀 3928

當我們的程式在第一次收到記憶體不足警告時,應該釋放一些不用的資源,以節省部分記憶體。否則,當記憶體不足情形依然存在,ios再次向我們程式發出記憶體不足的警告時,我們的程式將會被ios kill掉。

low-memory 處理思路

通常乙個應用程式會包含多個view controllers,當從view跳轉到另乙個view時,之前的view只是不可見狀態,並不會立即被清理掉,而是儲存在記憶體中,以便下一次的快速顯現。但是如果應用程式接收到系統發出的low-memory warning,我們就不得不把當前不可見狀態下的views清理掉,騰出更多的可使用記憶體;當前可見的view controller也要合理釋放掉一些快取資料,資源和一些不是正在使用的資源,以避免應用程式崩潰。

思路是這樣,具體的實施根據系統版本不同而略有差異,本文將詳細說明一下ios 5與ios 6的low-memory處理。

ios 5 的處理

在ios 6 之前,如果應用程式接收到了low-memory警告,當前不可見的view controllers會接收到viewdidunload訊息(也可以理解為自動呼叫viewdidunload方法),所以我們需要在 viewdidunload 方法中釋放掉所有 outlets ,以及可再次建立的資源。當前可見的view controller 通過didreceivememorywarning 合理釋放資源,具體見**注釋。

舉乙個簡單的例子,有這樣乙個view controller:

@inte***ce myviewcontroller : uiviewcontroller   

@property (nonatomic, strong) iboutlet uitableview *tableview;  

@end 

對應的處理則為:

#pragma mark -

#pragma mark memory management

- (void)didreceivememorywarning

- (void)viewdidunload

ios 6 的處理

ios 6 廢棄了viewdidunload方法,這就意味著一切需要我們自己在didreceivememorywarning中操作。

具體應該怎麼做呢?

1.將 outlets 置為 weak

當view dealloc時,沒有人握著任何乙個指向subviews的強引用,那麼subviews例項變數將會自動置空。

@property (nonatomic, weak) iboutlet uitableview *tableview;

2.在didreceivememorywarning中將快取資料置空

#pragma mark -   

#pragma mark memory management   

- (void)didreceivememorywarning  

不要忘記一點,每當tableview reload 的時候,需要判斷一下 dataarray ,若為空則重新建立。

相容ios 5 與 ios 6

好吧,重點來了,倘若希望程式相容ios 5 與 ios 6怎麼辦呢? 這裡有乙個小技巧,我們需要對didreceivememorywarning 做一些手腳:

#pragma mark -

#pragma mark memory management

- (void)didreceivememorywarning

dataarray = nil;

}判斷一下view是否是window的一部分,如果不是,那麼可以放心的將self.view 置為空,以換取更多可用記憶體。

這樣會是什麼現象呢?假如,從view controller a 跳轉到 view controller b ,然後模擬low-memory警告,此時,view controller a 將會執行self.view = nil ; 當我們從 b 退回 a 時, a 會重新呼叫一次 viewdidload ,此時資料全部重新建立,簡單相容無壓力~~

note:

引自:

IOS6記憶體警告處理

當我們的程式在第一次收到記憶體不足警告時,應該釋放一些不用的資源,以節省部分記憶體。否則,當記憶體不足情形依然存在,ios再次向我們程式發出記憶體不足的警告時,我們的程式將會被ios kill掉。low memory 處理思路 通常乙個應用程式會包含多個view controllers,當從view...

iOS記憶體警告

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!我們都知道在移動裝置上很多資源都是比較緊缺的,尤其時記憶體,通常都比較小,iphone4也才只有512mb。而且ios4.0以後還支援了多工,這個問題就更加突出了。因此我們在平時設計程式的時候要注意管理好記憶體,減少不必要的開銷,謹防洩露。由於寫的...

IOS 6 基礎框架概覽

原文日期 2012年12月23日 編者按 本文與原文標題略有不同,內容相同。可以看出ios和mac的變化主要就在cocoa touch上面差別。cocoa touch允許你操作螢幕上的事件。cocoa touch multi touch event alerts multi touch contro...