OC--init,initialize,initWithCoder:,initWithFrame:各方法的區(qū)別和加載順序

1祷膳、先把OC的類分清楚各友善么方法
普通類的方法
init
initialize:
控制器類的方法
init
initialize:
initWithCoder:
UI控件類的方法
init
initialize:
initWithCoder:
initWithFrame:
2陶衅、init方法
每個類被創(chuàng)建的時候就會調(diào)用init方法

Person *p1 = [[Person alloc]init];
Person *p2 = [[Person alloc]init];
Person *p3 = [[Person alloc]init];
Person *p4 = [[Person alloc]init];

打印信息

2015-10-14 10:42:58.852 afgasdgsdfsd[856:19063] Person---init---Person
2015-10-14 10:42:58.852 afgasdgsdfsd[856:19063] Person---init---Person
2015-10-14 10:42:58.853 afgasdgsdfsd[856:19063] Person---init---Person
2015-10-14 10:42:58.853 afgasdgsdfsd[856:19063] Person---init---Person

在有繼承關(guān)系的情況下,比如Student類繼承Person類直晨,那么在不重寫子類的init方法時搀军,創(chuàng)建子類對象

Person *p1 = [[Person alloc]init];
Person *p2 = [[Person alloc]init];
Person *p3 = [[Person alloc]init];
Person *p4 = [[Person alloc]init];
Student *s = [[Student alloc] init];


- (instancetype)init{

    if (self = [super init]) {
        NSLog(@"Person---init---%@",[self class]);
    }
    return self;
}

打印信息

2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Student

我們可以看到再一次調(diào)用了父類的init,因為父類幫子類創(chuàng)建了對象勇皇。
如果子類重寫了init方法罩句,也會先調(diào)用父類的init。

3敛摘、initialize:
這個類跟init經(jīng)趁爬茫混淆,但是還是有區(qū)別的,我們先看看調(diào)用的書序

#import "Person.h"

@implementation Person
- (instancetype)init{

    if (self = [super init]) {
        NSLog(@"Person---init---%@",[self class]);
    }
    return self;
}

+ (void)initialize{

    if ( self == [Person class]) {
        NSLog(@"Person----initialize---%@",[self class]);
    }
}
@end

打印信息

2015-10-14 11:00:43.568 afgasdgsdfsd[904:22876] Person----initialize---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person
2015-10-14 11:00:43.569 afgasdgsdfsd[904:22876] Person---init---Person

我們可以看到先打印initialize:方法屯远,而且只打印的一次蔓姚,為什么呢?
在程序運行過程中慨丐,它會在你程序中每個類調(diào)用一次initialize坡脐。這個調(diào)用的時間發(fā)生在你的類接收到消息之前,但是在它的超類接收到initialize之后咖气。
系統(tǒng)在第一次使用這個類的時候調(diào)用(一個類只會調(diào)用一次)
如果在有繼承關(guān)系的情況下有三種
一挨措、父類重寫:只有父類調(diào)用
二、子類重寫:只有子類調(diào)用
三崩溪、父子類重寫:父子類調(diào)用

#import "Person.h"

@implementation Person
- (instancetype)init{

    if (self = [super init]) {
        NSLog(@"Person---init---%@",[self class]);
    }
    return self;
}

+ (void)initialize{

    if ( self == [Person class]) {
        NSLog(@"Person----initialize---%@",[self class]);
    }
}
@end

Alex 2015/10/14 11:17:25
#import "Student.h"

@implementation Student

- (instancetype)init{

    if (self = [super init]) {
        NSLog(@"Student---init");
    }
    return self;
}


+ (void)initialize{

    if ( self == [Student class]) {
        NSLog(@"Student----initialize---%@",[self class]);
    }
}
@end
Person *p1 = [[Person alloc]init];
    Person *p2 = [[Person alloc]init];

    Student *s = [[Student alloc] init];
2015-10-14 11:17:54.500 afgasdgsdfsd[970:26330] Person----initialize---Person
2015-10-14 11:17:54.501 afgasdgsdfsd[970:26330] Person---init---Person
2015-10-14 11:17:54.501 afgasdgsdfsd[970:26330] Person---init---Person
2015-10-14 11:17:54.501 afgasdgsdfsd[970:26330] Student----initialize---Student
2015-10-14 11:17:54.502 afgasdgsdfsd[970:26330] Person---init---Student
2015-10-14 11:17:54.502 afgasdgsdfsd[970:26330] Student---init

4浅役、initWithCoder:
這個方法時遵守了NSCoding協(xié)議 作用:通過xib或者storyboard創(chuàng)建UI控件就會調(diào)用這個方法

5、initWithFrame:
一般創(chuàng)建UI對象有兩種方式伶唯。
一種是通過nib觉既,一種是通過代碼。
如果是通過代碼創(chuàng)建乳幸,那么就會調(diào)用這個方法瞪讼,進行frame的部署,還有控件的創(chuàng)建粹断。但是在這個方法中創(chuàng)建控件并且設(shè)置尺寸的話符欠,你會發(fā)現(xiàn)UI控件不會顯示。為什么呢瓶埋?因為initWithFrame:調(diào)用時希柿,frame是0,沒有尺寸的养筒,所以根據(jù)這個frame設(shè)置UI控件的frame自然也為空曾撤。一般在這個方法中初始化UI控件。在layoutSubviews方法設(shè)置UI控件的frame晕粪。

/**
 *  通過代碼創(chuàng)建控件的時候就會調(diào)用
 */
- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        // 初始化UI控件
    }
    return self;
}

/**
 *  UI控件重新部署
 */
- (void)layoutSubviews{

    [super layoutSubviews];
    // 設(shè)置UI控件的frame
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挤悉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子巫湘,更是在濱河造成了極大的恐慌装悲,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剩膘,死亡現(xiàn)場離奇詭異衅斩,居然都是意外死亡,警方通過查閱死者的電腦和手機怠褐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門畏梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事奠涌∠芫蓿” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵溜畅,是天一觀的道長捏卓。 經(jīng)常有香客問我,道長慈格,這世上最難降的妖魔是什么怠晴? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮浴捆,結(jié)果婚禮上蒜田,老公的妹妹穿的比我還像新娘。我一直安慰自己选泻,他們只是感情好冲粤,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著页眯,像睡著了一般梯捕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窝撵,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天傀顾,我揣著相機與錄音,去河邊找鬼碌奉。 笑死锣笨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的道批。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼入撒,長吁一口氣:“原來是場噩夢啊……” “哼隆豹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茅逮,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤璃赡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后献雅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碉考,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年挺身,在試婚紗的時候發(fā)現(xiàn)自己被綠了侯谁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖墙贱,靈堂內(nèi)的尸體忽然破棺而出热芹,到底是詐尸還是另有隱情,我是刑警寧澤惨撇,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布伊脓,位于F島的核電站,受9級特大地震影響魁衙,放射性物質(zhì)發(fā)生泄漏报腔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一剖淀、第九天 我趴在偏房一處隱蔽的房頂上張望纯蛾。 院中可真熱鬧,春花似錦祷蝌、人聲如沸茅撞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米丘。三九已至,卻和暖如春糊啡,著一層夾襖步出監(jiān)牢的瞬間拄查,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工棚蓄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堕扶,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓梭依,卻偏偏與公主長得像稍算,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子役拴,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,349評論 2 4
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉糊探,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,682評論 0 9
  • ? 深拷貝同淺拷貝的區(qū)別:淺拷貝是指針拷貝,對一個對象進行淺拷貝河闰,相當于對指向?qū)ο蟮闹羔樳M行復(fù)制科平,產(chǎn)生一個新的指向...
    WSGNSLog閱讀 1,237評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評論 25 707
  • 午后陽光 灑在藍色碎花被面上 他坐在床頭 吸煙 想著一件 自己也不知道的神馬事 抑或神馬心事 陽光漸漸暗下去 所有...
    向日葵愛呀愛太陽閱讀 139評論 0 0