Swift初始化init中的一些坑

自定義控件初始化中常見(jiàn)的幾種錯(cuò)誤(指定構(gòu)造器和便利構(gòu)造器)
截圖:

Snip20151211_1.png

意思是:
1.沒(méi)有添加重寫(xiě)符override(重寫(xiě)父類方法)
2.沒(méi)有重寫(xiě)initWithCoder方法。(此方法只對(duì)應(yīng)初始化是從xib峻仇,執(zhí)行代碼只的是舒裤,未從xib初始化)

Snip20151211_2.png

意思是:為初始化父類的init方法

Snip20151211_3.png

意思是:必須代理初始化自己的方法

Snip20151211_4.png

意思是:不認(rèn)識(shí)此類型的Default

Snip20151211_5.png

意思是:禁止調(diào)用此初始化方法

Snip20151211_6.png

意思是:屬性label沒(méi)有在父類初始化方法調(diào)用之前初始化

看到這里是不是有種崩潰的心情步脓,別著急污淋,對(duì)于OC和Swift的初始化召衔,蘋果官方給了一些很合理的解釋天吓,請(qǐng)點(diǎn)開(kāi)這里:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

定義Swift初始化方法芥牌,必須遵循三條規(guī)則:
1.指定構(gòu)造器必須調(diào)用它直接父類的指定構(gòu)造器方法
2.便利構(gòu)造器必須調(diào)用同一類中定義的其他初始化方法
3.便利構(gòu)造器在最后必須調(diào)用一個(gè)指定構(gòu)造器烦味。
圖形說(shuō)明:

Snip20151211_7.png

便利構(gòu)造器 前面加convenience 指定構(gòu)造器什么都不用加,系統(tǒng)初始化方法 要加override

Snip20151211_8.png

還需要注意的是:
和OC一樣壁拉,未初始化時(shí)谬俄,屬性是不被賦值的,因?yàn)槠鋬?nèi)存空間不存在


Snip20151211_9.png

從這里我們來(lái)看Swift是怎么進(jìn)行初始化的:
1.第一階段弃理,是實(shí)例的所有屬性被初始化
2.第二階段溃论,實(shí)例的所有屬性可以再次的調(diào)整以備之后的使用

Swift的編譯器會(huì)對(duì)初始化的方法進(jìn)行安全地檢查已保證實(shí)例的初始化可以被安全正確的執(zhí)行:
1.指定構(gòu)造器必須要確保所有被類中提到的屬性在向上調(diào)用父類的指定構(gòu)造器前被初始化,之后才能將其他構(gòu)造任務(wù)移交給父類的中的構(gòu)造器痘昌。
2.指定構(gòu)造器必須先向上調(diào)用父類中的構(gòu)造器钥勋,然后才能為任意屬性賦值
3.遍歷構(gòu)造器必須線調(diào)用同一個(gè)類中的其他構(gòu)造器,然后再為屬性賦值
4.構(gòu)造器在第一個(gè)階段構(gòu)造完成之前辆苔,不能調(diào)用其他任何實(shí)例方法算灸,不能讀取實(shí)例屬性的值,self不能被引用

在這里解釋初始化所謂的第一階段:
初始化的第一個(gè)階段:
1.某個(gè)指定構(gòu)造器或便利構(gòu)造器被調(diào)用
2.完成新的實(shí)例內(nèi)存的分配驻啤,但此時(shí)內(nèi)存還沒(méi)有被初始化
3.指定構(gòu)造器確保其所在類引入的所有存儲(chǔ)型屬性都已賦值菲驴。存儲(chǔ)型屬性所屬的內(nèi)存完成初始化。
4.指定構(gòu)造器將調(diào)用父類的構(gòu)造器骑冗,完成父類屬性的初始化
5.這個(gè)調(diào)用父類構(gòu)造器的過(guò)程沿著構(gòu)造器鏈條一直往上執(zhí)行赊瞬,直到到達(dá)構(gòu)造器料條的最頂部(重復(fù)1—4步驟)
6.當(dāng)?shù)竭_(dá)了構(gòu)造器鏈條的最頂部,且已確保所有實(shí)例包含的存儲(chǔ)型屬性都已經(jīng)賦值贼涩。這個(gè)實(shí)例的內(nèi)存才會(huì)被認(rèn)為已經(jīng)完全初始化了

Snip20151211_10.png

注意:
1巧涧。子類的便利構(gòu)造器首先會(huì)被調(diào)用,此時(shí)便利構(gòu)造器還不能修改子類的任何屬性遥倦。
2.便利構(gòu)造器會(huì)調(diào)用子類中的指定構(gòu)造器谤绳,指定構(gòu)造器(子類)要確保所有的屬性都已賦值,完成所屬內(nèi)存的初始化
3.接著會(huì)指定構(gòu)造器(子類)會(huì)調(diào)用父類中的指定構(gòu)造器,完成父類屬性所屬內(nèi)存的初始化闷供,直到達(dá)到構(gòu)造器鏈條的最頂部,所有的屬性以及內(nèi)存被完全初始化统诺,然后進(jìn)入第二階段

Snip20151211_12.png

便利構(gòu)造器內(nèi)存未被初始化歪脏,不能修改屬性

Snip20151211_13.png

第二階段:
1.從頂部構(gòu)造器沿著鏈條一直向下,每個(gè)構(gòu)造器鏈條中類的指定構(gòu)造器都有機(jī)會(huì)一步定制實(shí)例粮呢。構(gòu)造器此時(shí)可以訪問(wèn)self婿失,修改它的屬性并調(diào)用實(shí)例方法等等
2.最終,任意構(gòu)造器鏈條中的便利構(gòu)造器可以有機(jī)會(huì)定制實(shí)例和使用self

Snip20151211_11.png

創(chuàng)建的錯(cuò)誤注意點(diǎn):
1.如果子類沒(méi)有定義任何指定構(gòu)造器啄寡,那么會(huì)默認(rèn)繼承所有來(lái)自父類的指定構(gòu)造器

Snip20151211_14.png

2.指定構(gòu)造器必須調(diào)用它最近父類的指定構(gòu)造器‘

Snip20151211_15.png

3.便利構(gòu)造器必須調(diào)用同一個(gè)類中定義的其他構(gòu)造器(指定或便利都可以)

Snip20151211_16.png

4.如果子類未定義任何指定構(gòu)造器豪硅,那么會(huì)默認(rèn)繼承所有來(lái)自父類的指定構(gòu)造器
5.指定構(gòu)造器必須要確保所有被類中提到的屬性在代理向上調(diào)用父類的指定構(gòu)造器前被初始化,之后才能將其他構(gòu)造任務(wù)交給父類的構(gòu)造器

Snip20151211_17.png

Snip20151211_18.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挺物,一起剝皮案震驚了整個(gè)濱河市懒浮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌识藤,老刑警劉巖砚著,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異痴昧,居然都是意外死亡稽穆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門赶撰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舌镶,“玉大人,你說(shuō)我怎么就攤上這事豪娜〔驼停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵瘤载,是天一觀的道長(zhǎng)骂澄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惕虑,這世上最難降的妖魔是什么坟冲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮溃蔫,結(jié)果婚禮上健提,老公的妹妹穿的比我還像新娘。我一直安慰自己伟叛,他們只是感情好私痹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般紊遵。 火紅的嫁衣襯著肌膚如雪账千。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天暗膜,我揣著相機(jī)與錄音匀奏,去河邊找鬼。 笑死学搜,一個(gè)胖子當(dāng)著我的面吹牛娃善,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瑞佩,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼聚磺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了炬丸?” 一聲冷哼從身側(cè)響起瘫寝,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稠炬,沒(méi)想到半個(gè)月后矢沿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酸纲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年捣鲸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽坡。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栽惶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疾嗅,到底是詐尸還是另有隱情外厂,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布代承,位于F島的核電站汁蝶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏论悴。R本人自食惡果不足惜掖棉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膀估。 院中可真熱鬧幔亥,春花似錦、人聲如沸察纯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至香伴,卻和暖如春慰枕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背即纲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工具帮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崇裁。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像束昵,于是被迫代替她去往敵國(guó)和親拔稳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 官方文檔 初始化 Initialization是為準(zhǔn)備使用類锹雏,結(jié)構(gòu)體或者枚舉實(shí)例的一個(gè)過(guò)程巴比。這個(gè)過(guò)程涉及了在實(shí)例里...
    hrscy閱讀 1,132評(píng)論 0 1
  • 本章將會(huì)介紹 存儲(chǔ)屬性的初始賦值自定義構(gòu)造過(guò)程默認(rèn)構(gòu)造器值類型的構(gòu)造器代理類的繼承和構(gòu)造過(guò)程可失敗構(gòu)造器必要構(gòu)造器...
    寒橋閱讀 767評(píng)論 0 0
  • 初始化 (Initialization) 自從蘋果2014年發(fā)布Swift轻绞,到現(xiàn)在已經(jīng)兩年多了,而Swift也來(lái)到...
    Lebron_James閱讀 1,196評(píng)論 0 0
  • 初始化(Initialization) 初始化是類佣耐、結(jié)構(gòu)體政勃、枚舉類型的準(zhǔn)備過(guò)程。這個(gè)過(guò)程涉及到所有存儲(chǔ)屬性的初始化...
    泗哥閱讀 5,625評(píng)論 0 3
  • 構(gòu)造過(guò)程是使用類兼砖、結(jié)構(gòu)體或枚舉類型的實(shí)例之前的準(zhǔn)備過(guò)程奸远。在新實(shí)例可用前必須執(zhí)行這個(gè)過(guò)程,具體操作包括設(shè)置實(shí)例中每個(gè)...
    莽原奔馬668閱讀 680評(píng)論 0 3