IOS中initWithFrame 和 initWithCoder的区别
2019獨角獸企業重金招聘Python工程師標準>>>
從nib中加載對象實例時,init:或initWithFrame:都不會調用。而是調用initWithCoder:怎么理解:有時候,知道initWithFrame方法如何用,但是么有弄明白 initWithFrame方法到底是什么? 那就通過查資料弄明白。
1.?initWithFrame方法是什么?
initWithFrame方法用來 初始化并返回一個新的視圖對象,根據指定的CGRect(尺寸)。 當然,其他UI對象,也有initWithFrame方法,但是,我們以UIView為例,來搞清楚initWithFrame方法。
2.什么時候用initWithFrame方法? 簡單的說,我們用編程方式申明,創建UIView對象時,使用initWithFrame方法。 在此,我們必須搞清楚,兩種方式來進行初始化UIView。 1.使用 Interface Builder 方式。 這種方式,就是使用nib文件。通常我們說的“拖控件” 的方式。
實際編程中,我們如果用Interface Builder 方式創建了UIView對象。(也就是,用拖控件的方式) 那么, initWithFrame方法方法是不會被調用的。因為nib文件已經知道如何初始化該View。(因為,我們在拖該view的時候,就定義好了長、寬、背景等屬性)。 這時候, 會調用initWithCoder方法,我們可以用initWithCoder方法來重新定義我們在nib中已經設置的各項屬性。
這就是為什么使用initWithCoder:的原因,因為BIDViewController.xib的view是BIDQuartzFunView類型,而不是UIView類型了,所以其實是從nib中加載對象實例。
2.使用編程方式。 就是我們聲明一個UIView的子類,進行“手工”編寫代碼的方式。
實際編程中,我們使用編程方式下,來創建一個UIView或者創建UIView的子類。這時候,將調用initWithFrame方法,來實例化UIView。 特別注意,如果在子類中重載initWithFrame方法,必須先調用父類的initWithFrame方法。在對自定義的UIView子類進行初始化操作。 比如:
- (id)initWithFrame:(CGRect)frame{
????self?= [super?initWithFrame:frame];//?先調用父類的initWithFrame方法
????if?(self) {
????????
????????//?再自定義該類(UIView子類)的初始化操作。
????????_scrollView?= [[UIScrollView?alloc]?initWithFrame:self.bounds];
????????[_scrollView?setFrame:CGRectMake(0,?0,?320,?480)];
????????_scrollView.contentSize?=?CGSizeMake(320*3,?480);
????????
????????[self?addSubview:_scrollView];
????}
????return self;
}
在這里,我想,應該對initWithFrame方法略知一二了。
當我們所寫的程序里沒用用Nib文件(XIB)時,用代碼控制視圖內容,需要調用initWithFrame去初始化
- (id)initWithFrame:(CGRect)frame
{
? ??if?(self?=[superinitWithFrame:frame]) {
? ? ? ??// 初始化代碼
? ? }
? ??return?self;
}
用于視圖加載nib文件,從nib中加載對象實例時,使用?initWithCoder初始化這些實例對象
- (id)initWithCoder:(NSCoder*)coder
{
? ??if?(self?=[superinitWithcoder:coder]) {
? ? ? ??// 初始化代碼
? ? }
? ??return?self;
}
1.initWithCoder: 對于.xib,當你嵌入一個視圖對象到xib,視圖加載時默認調用的是該方法;例如:假如創建的view來自nib,那么將會調用initWithCoder,由系統來調用,自己不能調用。 2.initWithFrame: 非.xib的手動編碼,視圖加載時默認調用的是該方法。是由自己調用,來初始化對象的
轉載于:https://my.oschina.net/u/2444750/blog/499795
總結
以上是生活随笔為你收集整理的IOS中initWithFrame 和 initWithCoder的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H5全屏滑动
- 下一篇: /etc/profile /etc/p