?
init方法
?
在init方法中實例化必要的對象(遵從LazyLoad思想)
?init方法中初始化ViewController本身
?
loadView方法
?
當view需要被展示而它卻是nil時,viewController會調(diào)用該方法。不要直接調(diào)用該方法。
如果手工維護views,必須重載重寫該方法
如果使用IB維護views,必須不能重載重寫該方法
loadView和IB構(gòu)建view
?
viewDidLoad方法
?
重載重寫該方法以進一步定制view
在iPhone OS 3.0及之后的版本中,還應(yīng)該重載重寫viewDidUnload來釋放對view的任何索引
viewDidLoad后調(diào)用數(shù)據(jù)Model
?
viewDidUnload方法?
?
當系統(tǒng)內(nèi)存吃緊的時候會調(diào)用該方法(注:viewController沒有被dealloc)
內(nèi)存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil(系統(tǒng)release view時已經(jīng)將其release掉了)
在該方法中釋放其他與view有關(guān)的對象、其他在運行時創(chuàng)建(但非系統(tǒng)必須)的對象、在viewDidLoad中被創(chuàng)建的對象、緩存數(shù)據(jù)等 release對象后,將對象置為nil(IBOutlet只需要將其置為nil,系統(tǒng)release view時已經(jīng)將其release掉了)
一般認為viewDidUnload是viewDidLoad的鏡像,因為當view被重新請求時,viewDidLoad還會重新被執(zhí)行
viewDidUnload中被release的對象必須是很容易被重新創(chuàng)建的對象(比如在viewDidLoad或其他方法中創(chuàng)建的對象),不要release用戶數(shù)據(jù)或其他很難被重新創(chuàng)建的對象
?
?
viewDidLoad總是在loadView之后調(diào)用,不管你是不是通過nib文件創(chuàng)建的,這個方法總是會被調(diào)用的。
viewDidUnload在收到內(nèi)存警告的時候調(diào)用,在我的理解,這個方法里面應(yīng)該做幾件事情:
1、釋放掉一些比較容易創(chuàng)建的對象,或者是一些比較占資源的對象(圖片、音頻等)
2、如果界面控件自己保持了引用計數(shù),這里也要釋放掉。(比如說,這個控件被設(shè)成了屬性,而且是retain的,這個retain的引用計數(shù)就必須釋放掉)
3、如果跨類的參數(shù)傳遞機制會在viewDidUnload以后產(chǎn)生不正常的效果,這里也必須處理。
?
dealloc方法
?
viewDidUnload和dealloc方法沒有關(guān)聯(lián),dealloc還是繼續(xù)做它該做的事情
?
流程:
?
(loadView/nib文件)來加載view到內(nèi)存 ——>viewDidLoad函數(shù)進一步初始化這些view ——>內(nèi)存不足時,調(diào)用viewDidUnload函數(shù)釋放views?—->當需要使用view時有回到第一步, 如此循環(huán)。
?
?
?
在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone開發(fā)里具有非常重要的作用。 視圖和窗口展示了應(yīng)用的用戶界面,同時負責界面的交互。UIKit和其他系統(tǒng)框架提供了很多視圖,你可以就地使用而幾乎不需要修改。當你需要展示的內(nèi)容與標準視圖允許的有很大的差別時,你也可以定義自己的視圖。
不管你是使用系統(tǒng)的視圖還是創(chuàng)建自己的視圖,你需要理解UIView和UIWindow類所提供的基本結(jié)構(gòu)。這些類提供了復雜的方法來管理視圖的布局和展示。理解這些方法的工作非常重要,使你在應(yīng)用發(fā)生改變時可以確認視圖有合適的行為。
?
視圖架構(gòu)?
大部分你想要可視化操作都是由視圖對象-即UIView類的實例-來進行的。一個視圖對象定義了一個屏幕上的一個矩形區(qū)域,同時處理該區(qū)域的繪制和觸屏事件。一個視圖也可以作為其他視圖的父視圖,同時決定著這些子視圖的位置和大小。UIView類做了大量的工作去管理這些內(nèi)部視圖的關(guān)系,但是需要的時候你也可以定制默認的行為。
?
視圖與層聯(lián)合起來處理著視圖內(nèi)容的解釋和動畫過渡。每個UIKit框架里的視圖都被一個層對象支持(通常是一個CALayer類的實例),它管理管理著后臺的視圖存儲和處理視圖相關(guān)的動畫。然而,當你需要對視圖的解釋和動畫行為有更多的控制權(quán)時,你可以使用層。
?
為了理解視圖和層之間的關(guān)系,我們可以借助于一些例子。應(yīng)用中的視圖包括了一個window(同時也是一個視圖),一個通用的表現(xiàn)得像一個容器視圖的UIView對象,一個圖像視圖,一個控制顯示用的工具條,和一個工具條按鈕(它本身不是一個視圖但是在內(nèi)部管理著一個視圖)。(注意這個應(yīng)用包含了一個額外的圖像視圖,它是用來實現(xiàn)動畫的)。為了簡化,同時因為這個視圖通常是被隱藏的,所以沒把它包含在下面的圖中。每個視圖都有一個相應(yīng)的層對象,它可以通過視圖礶r屬性被訪問。(因為工具條按鈕不是一個視圖,你不能直接訪問它的層對象。)
?
?
?
UIView的一些基本方法 init、loadView、viewDidLoad、viewDidUnload、dealloc
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
