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

