UIViewController是IOS程序中的一個重要組成部分,扮演者一個大管家的身份,管理着程序中的衆多視圖: 安全
什麼時候加載view,加載的原則是什麼,視圖什麼時候消失等問題,文檔中講的都很詳細。 app
Controller的view最好在須要顯示時再去加載,而且在系統發出內存警告時釋放沒必要要的view及相關的可再生的數據對象。 函數
1、UIViewController的初始化 spa
初始化時會根據須要調用init,initWithCoder等相關函數,這個時候咱們能夠作一下簡單的初始化操做,創建ViewController中須要使用的數據模型等,不建議在初始化階段就直接建立view及其餘與顯示有關的對象(應該放到loadView的時候去建立,或者採用懶加載的方法建立)。 .net
咱們都知道ViewController能夠經過代碼和xib兩種方式建立,這兩種方式的初始化流程也不盡相同。 xml
1)使用xib建立的VC 對象
xib其實最終是會把咱們的設置保存成一個數據集(xml文件),當須要初始化構建VC的時候,回去讀取記錄的數據集,而後幫咱們動態的建立VC,所以能夠想象它在初始化時會先去找看是否實現initWithCoder方法,若是該類實現了該方法,就直接調用initWithCoder方法建立對象,若是沒有實現的話就調用init方法。調用完初始化方法之後緊接着會調用awakeFromNib方法,在這個方法裏面咱們能夠作進一步的初始化操做。 blog
2)使用代碼建立VC 內存
使用代碼建立時,咱們根據須要手動的建立VC中的數據,若是本身定製VC時,還須要在init中調用[super init]。 ci
2、UIViewController中View的load和unload
前面講了不建議在VC初始化的時候就建立view及其餘與顯示相關的代碼,官方文檔建議將View的初始化操做放到loadView的時候再作,當VC接到內存告警時會調用didRecieveMemoryWarning這個時候咱們就要作出響應,釋放暫時不須要的對象。若是無視這個警告,系統內存不夠用時會會繼續發送,若是還得不處處理就會強制退出程序。下面看具體的loadView和unloadView時候都會作什麼操做。
1)Load週期
當須要顯示或者訪問view屬性時,view沒有建立的話,VC就會調用loadView方法,在這個時候會建立一個view並將其賦給VC.view屬性。緊接着就會調用VC的viewDidLoad方法,這個時候VC.view保證是有值的,能夠作進一步的初始化操做,例如添加一些subview。注意:定製VC時,若是覆蓋loadView方法,不須要調用[super loadView]方法。
2)Unload週期
當app收到內存警告的時候,會調用每個VC的didRecieveMemoryWarning方法,咱們須要作出響應,釋放程序中暫時不須要的資源。一般都會重寫該方法,重寫時候須要調用super的該方法。若是檢測到當前VC的view能夠被安全釋放的話,就會調用viewWillUnload方法,這個咱們必需要重視,由於當VC的view消失時候它的subviews可能會被一塊兒釋放,咱們須要根據具體狀況作一些記錄,以保證下次可以正確建立,同時不出現內存泄漏。調用viewWillUnload之後,會將VC.view屬性設置成nil,而後在調用viewDidUnload方法,這個時候咱們能夠釋放那些強引用的對象。
轉自:http://blog.csdn.net/likendsl/article/details/7629517