日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

IOS中initWithFrame 和 initWithCoder的区别

發(fā)布時(shí)間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS中initWithFrame 和 initWithCoder的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

從nib中加載對(duì)象實(shí)例時(shí),init:或initWithFrame:都不會(huì)調(diào)用。而是調(diào)用initWithCoder:怎么理解:
有時(shí)候,知道initWithFrame方法如何用,但是么有弄明白 initWithFrame方法到底是什么? 那就通過(guò)查資料弄明白。


1.?initWithFrame方法是什么?
initWithFrame方法用來(lái) 初始化并返回一個(gè)新的視圖對(duì)象,根據(jù)指定的CGRect(尺寸)。 當(dāng)然,其他UI對(duì)象,也有initWithFrame方法,但是,我們以UIView為例,來(lái)搞清楚initWithFrame方法。
2.什么時(shí)候用initWithFrame方法? 簡(jiǎn)單的說(shuō),我們用編程方式申明,創(chuàng)建UIView對(duì)象時(shí),使用initWithFrame方法。 在此,我們必須搞清楚,兩種方式來(lái)進(jìn)行初始化UIView。 1.使用 Interface Builder 方式。 這種方式,就是使用nib文件。通常我們說(shuō)的“拖控件” 的方式。
實(shí)際編程中,我們?nèi)绻肐nterface Builder 方式創(chuàng)建了UIView對(duì)象。(也就是,用拖控件的方式) 那么, initWithFrame方法方法是不會(huì)被調(diào)用的。因?yàn)閚ib文件已經(jīng)知道如何初始化該View。(因?yàn)?#xff0c;我們?cè)谕显搗iew的時(shí)候,就定義好了長(zhǎng)、寬、背景等屬性)。 這時(shí)候, 會(huì)調(diào)用initWithCoder方法,我們可以用initWithCoder方法來(lái)重新定義我們?cè)趎ib中已經(jīng)設(shè)置的各項(xiàng)屬性。
這就是為什么使用initWithCoder:的原因,因?yàn)锽IDViewController.xib的view是BIDQuartzFunView類(lèi)型,而不是UIView類(lèi)型了,所以其實(shí)是從nib中加載對(duì)象實(shí)例。
2.使用編程方式。 就是我們聲明一個(gè)UIView的子類(lèi),進(jìn)行“手工”編寫(xiě)代碼的方式。
實(shí)際編程中,我們使用編程方式下,來(lái)創(chuàng)建一個(gè)UIView或者創(chuàng)建UIView的子類(lèi)。這時(shí)候,將調(diào)用initWithFrame方法,來(lái)實(shí)例化UIView。 特別注意,如果在子類(lèi)中重載initWithFrame方法,必須先調(diào)用父類(lèi)的initWithFrame方法。在對(duì)自定義的UIView子類(lèi)進(jìn)行初始化操作。 比如:

- (id)initWithFrame:(CGRect)frame{

????self?= [super?initWithFrame:frame];//?先調(diào)用父類(lèi)的initWithFrame方法

????if?(self) {

????????

????????//?再自定義該類(lèi)(UIView子類(lèi))的初始化操作。

????????_scrollView?= [[UIScrollView?alloc]?initWithFrame:self.bounds];

????????[_scrollView?setFrame:CGRectMake(0,?0,?320,?480)];

????????_scrollView.contentSize?=?CGSizeMake(320*3,?480);

????????

????????[self?addSubview:_scrollView];

????}

????return self;

}


在這里,我想,應(yīng)該對(duì)initWithFrame方法略知一二了。

當(dāng)我們所寫(xiě)的程序里沒(méi)用用Nib文件(XIB)時(shí),用代碼控制視圖內(nèi)容,需要調(diào)用initWithFrame去初始化

- (id)initWithFrame:(CGRect)frame

{

? ??if?(self?=[superinitWithFrame:frame]) {

? ? ? ??// 初始化代碼

? ? }

? ??return?self;

}


用于視圖加載nib文件,從nib中加載對(duì)象實(shí)例時(shí),使用?initWithCoder初始化這些實(shí)例對(duì)象

- (id)initWithCoder:(NSCoder*)coder

{

? ??if?(self?=[superinitWithcoder:coder]) {

? ? ? ??// 初始化代碼

? ? }

? ??return?self;

}


1.initWithCoder: 對(duì)于.xib,當(dāng)你嵌入一個(gè)視圖對(duì)象到xib,視圖加載時(shí)默認(rèn)調(diào)用的是該方法;例如:假如創(chuàng)建的view來(lái)自nib,那么將會(huì)調(diào)用initWithCoder,由系統(tǒng)來(lái)調(diào)用,自己不能調(diào)用。 2.initWithFrame: 非.xib的手動(dòng)編碼,視圖加載時(shí)默認(rèn)調(diào)用的是該方法。是由自己調(diào)用,來(lái)初始化對(duì)象的

轉(zhuǎn)載于:https://my.oschina.net/u/2444750/blog/499795

總結(jié)

以上是生活随笔為你收集整理的IOS中initWithFrame 和 initWithCoder的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。