IOS中的記憶體不足警告處理(譯)

來源:互聯網
上載者:User

標籤:

  由於在IOS中虛擬記憶體系統不會採用頁置換的方式來擷取請求記憶體,取而代之的是它通過移除應用程式中的強引用來釋放一些記憶體資源,我們知道強引用在IOS中表示擁有關係,只要有至少一個變數擁有這個對象,那麼對象就不會被釋放,當然IOS中沒有類似Java或.NET的記憶體回收機制,所以我們需要手動來釋放對象的引用。當然在ARC中,編譯器會在編譯階段為我們插入這段釋放代碼。釋放其實就是減少引用計數,有關於引用計數在記憶體管理中的應用,我會在另一篇文章中做描述。

  當可用虛擬記憶體頁的數量低於系統規定的臨界值時,系統會儘可能自動釋放那些唯讀記憶體頁,同時也會向當前啟動並執行應用程式發送一個記憶體不足的警告。當你的應用程式接收到這個訊息通知時,我們應該重視它,一旦我們接收到這樣的訊息,我們的應用程式必須儘可能的移除儘可能多的對象的強引用。例如,我們可以清除那些可以再次讀取到的資料緩衝。

  UIKit為我們提供了很多方式來接收這些記憶體管理通知,如下所示:

  • 實現應用程式代理程式的 applicationDidReceiveMemoryWarning:方法。(AppDelegate)

  • 重寫自訂控制器的 didReceiveMemoryWarning方法。(UIViewController)

  • 通過註冊接收 UIApplicationDidReceiveMemoryWarningNotification訊息通知。(NSNotificationCenter)

  一旦接收到記憶體警告通知,我們的處理器方法應該馬上移除一些對象的強引用。控制器會自動移除那些當前不在螢幕上顯示的對象引用,但是我們最好還是需要覆寫一下didReceiveMemoryWarning方法來移除一些我們控制器不需要的額外的對象引用。例如:當導航控制器Navigation Controller接收到記憶體警告後,它會首先判斷它所包含的控制器是否存在一個非空View,然後會詢問是否這個View可以被銷毀(例如當前需要顯示在介面上的View原則上不可以被銷毀),如果可以被銷毀,那麼系統會直接回收這個View所佔用的記憶體,當然這個View呈現所依賴的資料這個時候最好通過代碼移除(例如:self.data = nil;),View都不存在了,那些資料也就沒有存在的必要了(ViewDidUnLoad處理,新版本已經廢棄了該方法)。下面引用蘋果官方的一個流程圖:

  如果我們僅僅只有很少的一些可清除的對象資源,我們可以通過註冊 UIApplicationDidReceiveMemoryWarningNotification訊息通知來移除這些引用。如果我們有很多可清楚的對象並且期望選擇性的清除一些,那麼我們最好使用應用程式代理程式來決定哪些對象該保留哪些對象該清除,那麼實現 applicationDidReceiveMemoryWarning:方法將會是一種更好的選擇。

  和系統應用程式一樣,我們的應用程式應該總是處理記憶體不足的警告,即使在我們測試時沒有接受到這些警告訊息。當系統檢測到記憶體不足時,系統會將記憶體不足訊息警告分發給所有在運行中的應用程式,有可能會直接終止掉某些後台應用程式來釋放記憶體壓力。如果還沒有足夠的記憶體給我們應用程式使用,系統會認為我們的應用程式可能發生了記憶體泄露或者是使用了太多的記憶體,然後系統會無情的終止我們的應用程式。聽起來真得很殘暴。

 

 

 

 

 

 

 

 

 

 

 

IOS中的記憶體不足警告處理(譯)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.