簡體   English   中英

iPhone內存警告准則

[英]iPhone memory warning guidelines

如果收到內存警告,有什么具體指導方針嗎? 我知道您必須嘗試殺死不需要的對象,但是如果這使您的應用程序無法運行,還有哪些其他選擇?

例如,假設某個應用程序是Apple的通訊錄應用程序,而用戶正在編輯某人的通訊錄詳細信息。 你能做什么? 停止編輯嗎? 關閉並跳至列表屏幕?

任何建議或指導方針將不勝感激。

如果您的應用程序位於前台,並且需要當前分配的所有內存以提供良好的用戶體驗,那么一個完全合理的選擇是在收到內存警告后不執行任何操作,並希望操作系統終止或導致內存不足的其他進程。

但是,如果您的應用程序不太幸運,那么至少保存重要狀態可能是一個好主意。

他們不會指定您需要釋放多少……您只是破壞了您能夠重建的東西(例如,那些不在屏幕上的東西)。 不要竊取/銷毀用戶正在查看的內容。 最終,系統可能會在需要資源時終止您的應用程序。 我只是采用這種方法:如果在屏幕外,則清除中號+大號分配,當用戶導航回該屏幕時可以重新構建,並嘗試保持較低的內存消耗開始-測量您在測試運行中使用了多少內存。

關於視圖控制器的視圖管理和內存警告:

UIKit不僅允許從視圖控制器導航回,而且還允許從現有控制器導航到其他視圖控制器。 在這種情況下,將分配一個新的UIViewController,然后將其加載到視圖中。 舊的視圖控制器將退出屏幕並變為非活動狀態,但仍擁有許多對象,其中一些位於自定義屬性和變量中,另一些在視圖屬性/層次結構中。 關於其視圖對象,新的可見視圖控制器也是如此。

由於移動設備的內存量有限,擁有兩組對象(一組在屏幕外視圖控制器中,另一組在屏幕上視圖控制器中)可能無法處理。 如果UIKit認為有必要,它可以回收屏幕外視圖控制器的某些內存,但這些內存始終不會顯示; UIKit知道哪個視圖控制器在屏幕上,哪個在屏幕外,畢竟,這是管理它們的視圖控制器(當您調用presentModalViewController:animated:或dismissModalViewControllerAnimated:時)。 因此,每次感到壓力時,UIKit都會生成一個內存警告,該警告將從視圖層次結構中卸載並釋放您的屏幕外視圖,然后調用自定義viewDidUnload方法讓您對屬性和變量執行相同的操作。 UIKit會自動釋放self.view,然后允許我們在viewDidUnload代碼中手動釋放變量和屬性。 對於所有屏幕外的視圖控制器,都是這樣做的。

當系統內存不足時,它將觸發didReceiveMemoryWarning。 當出現內存警告時,屏幕外視圖將被回收並釋放,但是您的屏幕上視圖將不會被釋放-它是可見的並且是必需的。 如果您的類擁有大量內存,例如緩存,圖像等,那么即使在屏幕上,didReceiveMemoryWarning也是清除它們的位置; 否則,您的應用可能會因為系統資源過多而終止。 您需要重寫此方法以確保清理內存。 只要記住您調用[super didReceiveMemoryWarning];。

此處提供更詳盡的解釋: http : //myok12.wordpress.com/2010/11/30/custom-uiviewcontrollers-their-views-and-their-memory-management/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM