iOS 關(guān)于構(gòu)造方法一點(diǎn)知識(shí)

構(gòu)造方法

1.什么是構(gòu)造方法?

初始化對(duì)象的方法.

默認(rèn)情況下,在 OC 當(dāng)中創(chuàng)建1個(gè)對(duì)象分為兩部分(new 做的事):

+alloc:分配內(nèi)存空間

-init :初始化對(duì)象

2.構(gòu)造方法的作用是?

用作初始化對(duì)象的成員變量.

把 C 語言指針初始化為 NULL

把 OC 對(duì)象初始化為 nil

把基本數(shù)據(jù)類型初始化為0

3.構(gòu)造方法的書寫格式是?

- (instancetype)init

{

self = [super init];

if (self) {

<#statements#>

}

return self;

}

構(gòu)造方法的結(jié)構(gòu)很重要.

第一步,調(diào)用指定的父類初始化函數(shù).該初始化函數(shù)返回父類對(duì)象的一個(gè)經(jīng)過初始化的實(shí)例.

第二步,把返回回來的實(shí)例必須將其賦值給特殊的變量 self.

第三步,如果在初始化過程中出現(xiàn)任何問題,初始化函數(shù)的協(xié)議指定返回一個(gè) nil對(duì)象,而不是一個(gè)有效的初始化對(duì)象.因此,在將父類的初始化函數(shù)返回值賦值 self 后,必須檢查 self 是否是 nil. 如果是,就不想要初始化自身的變量了,返回 nil 即可.上面的事例中,我們?cè)?if 語句中將變量賦值給 self 并檢查它是否是 nil.

第四步:構(gòu)造方法的真正目的除了創(chuàng)建 self 外,還用于初始化對(duì)象中的所有數(shù)據(jù)成員.因此在驗(yàn)證 self 不是 nil 后,就可以初始化變量了.在初始化變量后,就可以從初始化方法中返回 self.

疑問:在學(xué)習(xí)和使用構(gòu)造方法時(shí),我一直心里有個(gè)疑問:為什么 self = [super init];蘋果官網(wǎng)對(duì)此沒有明確的說明,所有的一切都是開發(fā)者的猜測(cè).

下面是我對(duì)此經(jīng)過多次測(cè)試,所得到結(jié)果的猜測(cè):

1.第一點(diǎn),[super init],之所以調(diào)用父類的 init 方法,是因?yàn)槿绻宇愔貙懥硕x在父類當(dāng)中的方法,在子類執(zhí)行過程當(dāng)中,就不會(huì)執(zhí)行父類當(dāng)中的該方法.而面向?qū)ο缶幊痰淖钪饕攸c(diǎn)之一就是:誰的事情,誰去做.子類當(dāng)中,繼承了父類的所有可繼承的成員變量,那么該些成員變量就應(yīng)該是父類自己去初始化,而不應(yīng)該子類替代父類去做初始化操作.所以此處需要調(diào)用父類的構(gòu)造方法.

2.第二點(diǎn),也就是難點(diǎn),為什么要將父類初始化后的實(shí)例對(duì)象賦值給子類當(dāng)中的 self ???這才是我疑惑非常久的問題.

猜測(cè)1.調(diào)用父類的初始化方法,肯定要返回一個(gè)對(duì)象,那么這個(gè)對(duì)象用誰去接收?應(yīng)該看 super 當(dāng)前代表的是誰,是什么類型來確定.

猜測(cè)2.如果父類初始化失敗,在子類當(dāng)中沒有值接收,就沒有辦法進(jìn)行把控,所以要賦值給一個(gè)當(dāng)前對(duì)象.

// 作用:初始化成員變量

-(instancetype)init

{

// 1.調(diào)用父類的初始化方法,進(jìn)行初始化子類繼承自父類的成員變量.

self = [super init];

// 問題:這里要返回一個(gè)初始化好的實(shí)例對(duì)象,那么用什么來接受這個(gè)對(duì)象???

// 1.1.用父類?

// 1.2.用子類本身?

// 結(jié)論:NSLog(@"super-%@",super.class);super 是本類對(duì)象,所以用 self 接受

// 3.因?yàn)檎{(diào)用父類初始化方法,可能初始化成功,可能初始化失敗,那么如果初始化失敗,就不應(yīng)該繼續(xù)下面的操作

if (self) {

// 3.1.如果父類初始化成功,下面開始初始化子類成員

_name = @"碼奴!";

}

// 4.返回已經(jīng)初始化好的對(duì)象

return self;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子渗鬼,更是在濱河造成了極大的恐慌,老刑警劉巖象缀,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摩疑,死亡現(xiàn)場(chǎng)離奇詭異粤铭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屋休,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門惶我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人博投,你說我怎么就攤上這事《⒑” “怎么了毅哗?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)捧挺。 經(jīng)常有香客問我虑绵,道長(zhǎng),這世上最難降的妖魔是什么闽烙? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任翅睛,我火速辦了婚禮,結(jié)果婚禮上黑竞,老公的妹妹穿的比我還像新娘捕发。我一直安慰自己,他們只是感情好很魂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布扎酷。 她就那樣靜靜地躺著,像睡著了一般遏匆。 火紅的嫁衣襯著肌膚如雪法挨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天幅聘,我揣著相機(jī)與錄音凡纳,去河邊找鬼。 笑死帝蒿,一個(gè)胖子當(dāng)著我的面吹牛荐糜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葛超,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼狞尔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了巩掺?” 一聲冷哼從身側(cè)響起偏序,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胖替,沒想到半個(gè)月后研儒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豫缨,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年端朵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了好芭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冲呢,死狀恐怖舍败,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敬拓,我是刑警寧澤邻薯,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站乘凸,受9級(jí)特大地震影響厕诡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜营勤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一灵嫌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葛作,春花似錦寿羞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至客年,卻和暖如春霞幅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背量瓜。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工司恳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绍傲。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓扔傅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親烫饼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猎塞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,250評(píng)論 1 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,783評(píng)論 1 10
  • 官方文檔 初始化 Initialization是為準(zhǔn)備使用類,結(jié)構(gòu)體或者枚舉實(shí)例的一個(gè)過程杠纵。這個(gè)過程涉及了在實(shí)例里...
    hrscy閱讀 1,133評(píng)論 0 1
  • 在微博上看了一個(gè)關(guān)于器官捐獻(xiàn)的視頻荠耽,以一位器官捐獻(xiàn)協(xié)調(diào)員的身份講述捐獻(xiàn)案例,側(cè)重點(diǎn)在于回天無力后家屬們的痛苦抉擇比藻。...
    木歸門閱讀 206評(píng)論 0 1
  • 為了把孩子培養(yǎng)成大腦的主人铝量,要相信孩子的大腦是一個(gè)完整的客觀存在倘屹。也就是說承認(rèn)孩子是一個(gè)獨(dú)立的人性個(gè)體,其具有無限...
    金勇Maya閱讀 196評(píng)論 0 1