一项乒、instancetype和id(http://blog.csdn.net/kuizhang1/article/details/18048829)
id:未知類(lèi)型對(duì)象關(guān)鍵字
instancetype:某個(gè)方法返回的未知類(lèi)型關(guān)鍵字
在非關(guān)聯(lián)返回類(lèi)型方法中:
+?(id)constructAnArray;
[NSArrayconstructAnArray];返回id類(lèi)型
+?(instancetype)constructAnArray;
[NSArrayconstructAnArray];返回NSArray*類(lèi)型
所以:instancetype的作用冲甘,就是使那些非關(guān)聯(lián)返回類(lèi)型的方法返回所在類(lèi)的類(lèi)型
1翔冀、相同點(diǎn)
都可以作為方法的返回類(lèi)型
2、不同點(diǎn)
①instancetype可以返回和方法所在類(lèi)相同類(lèi)型的對(duì)象座哩,id只能返回未知類(lèi)型的對(duì)象;
②instancetype只能作為返回值,不能像id那樣作為參數(shù)
二、initWithFrame和initWithCoder
純代碼時(shí)用initWithFrame初始化對(duì)象
IB時(shí)用initWithCoder叠萍,initWithFrame不會(huì)被調(diào)用,因?yàn)閚ib已經(jīng)初始化了
三绪商、setNeedsDisplay和setNeedsLayout以及l(fā)ayoutSubviews和drawRect(http://jianyu996.blog.163.com/blog/static/112114555201305113018814/)
layoutSubviews:用來(lái)調(diào)整子視圖的尺寸和位置
setNeedsLayout會(huì)默認(rèn)調(diào)用layoutSubViews苛谷,就可以處理子視圖中的一些數(shù)據(jù)
drawRect:創(chuàng)建自己的試圖,該方法不被建議手動(dòng)顯示調(diào)用部宿,須通過(guò)調(diào)用setNeedsDisplay?或 者?setNeedsDisplayInRect抄腔,讓系統(tǒng)自動(dòng)調(diào)該方法
如果在UIView初始化時(shí)沒(méi)有設(shè)置rect大小,將直接導(dǎo)致drawRect不被自動(dòng)調(diào)用
該方法在調(diào)用sizeToFit后被調(diào)用理张,所以可以先調(diào)用sizeToFit計(jì)算出size赫蛇。然后系統(tǒng)自動(dòng)調(diào)用drawRect:方法
+(void) initialize {
}
-(void) init {
}
程序運(yùn)行過(guò)程中雾叭,它會(huì)在你程序中每個(gè)類(lèi)調(diào)用一次initialize悟耘。這個(gè)調(diào)用的時(shí)間發(fā)生在你的類(lèi)接收到消息之前,但是在它的超類(lèi)接收到initialize之后织狐。
實(shí)例化對(duì)象n次會(huì)調(diào)用n次init暂幼,但是只調(diào)用一次initialize。