Swift 類的初始化 Initializer

Phase 1

1. A designated or convenience initializer is called on a class.
2. Memory for a new instance of that class is allocated. The
 memory is not yet initialized.
3. A designated initializer for that class confirms that all stored
 properties introduced by that class have a value. The memory for
 these stored properties is now initialized.
4. The designated initializer hands off to a superclass initializer to
 perform the same task for its own stored properties.
5. This continues up the class inheritance chain until the top of
 the chain is reached.
6. Once the top of the chain is reached, and the final class in the
 chain has ensured that all of its stored properties have a value,
 the instance’s memory is considered to be fully initialized, and
 phase 1 is complete.

Phase 2

1. Working back down from the top of the chain, each designated
 initializer in the chain has the option to customize the instance further. Initializers are now able to access self and can modify its
 properties, call its instance methods, and so on.
2. Finally, any convenience initializers in the chain have the option
 to customize the instance and to work with self.

上面總結(jié):
第一階段指, 初始化從上到下初始化完成, 從上到下指父類
第二階段指, 初始化鏈結(jié)束后, 可以對繼承的屬性進(jìn)行修改, 對方法進(jìn)行調(diào)用

Tips

  1. 初始化方法中給屬性賦值, 不會走 willSetdidSet, 但在初始化方法中調(diào)用的其他方法, 其他方法給屬性賦值會走上面的兩個方法
class A {
    init() {
        
    }
    
    convenience init(k: Int) {
        self.init()
    }
}
class AA: A {
    var a = 10 {
        didSet {
            print("\(a)")
        }
    }
    
    override init() {
        self.a = 10
        super.init()
        self.a = 20
        self.run()
        self.a = 40
    }
    
    convenience init(a: Int) {
        self.init()
        self.a = 50
    }
    
    func run() {
        self.a = 30
    }
}

let a = AA(a: 1)

//print
30
  1. 便利構(gòu)造器, 在使用 self 之前, 必須調(diào)用自己的指定構(gòu)造器.
  2. 指定構(gòu)造器, 在訪問方法或者父類的屬性之前, 必須調(diào)用父類的指定構(gòu)造器
  3. 調(diào)用父類構(gòu)造器之前, 必須給自己的沒賦值的確定屬性(指不是可選, 沒有使用 ?!) 賦值.
  4. 如果子類的屬性都有默認(rèn)值, 或者是可選的, 即使子類會自動繼承父類的構(gòu)造器, 但如果子類有其他的指定構(gòu)造器, 這個就失效了.
class C {
    var a: Int
    init(a: Int) {
        self.a = a
    }
}

class CC: C {
    var b = 10
}

let c = CC(a: 10)
print(c.a)

// print
10
  1. 失敗的初始化
class D {
    init?() {
        return nil
    }
}

let d = D()
print(d)

// print
nil
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碟婆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弹谁,更是在濱河造成了極大的恐慌澳叉,老刑警劉巖捅儒,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件工育,死亡現(xiàn)場離奇詭異,居然都是意外死亡屿聋,警方通過查閱死者的電腦和手機(jī)机久,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門臭墨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膘盖,你說我怎么就攤上這事胧弛。” “怎么了侠畔?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵结缚,是天一觀的道長。 經(jīng)常有香客問我软棺,道長红竭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任喘落,我火速辦了婚禮茵宪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘦棋。我一直安慰自己稀火,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布兽狭。 她就那樣靜靜地躺著憾股,像睡著了一般鹿蜀。 火紅的嫁衣襯著肌膚如雪箕慧。 梳的紋絲不亂的頭發(fā)上服球,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音颠焦,去河邊找鬼斩熊。 笑死,一個胖子當(dāng)著我的面吹牛伐庭,可吹牛的內(nèi)容都是我干的粉渠。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼圾另,長吁一口氣:“原來是場噩夢啊……” “哼霸株!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集乔,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤去件,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扰路,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尤溜,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年汗唱,在試婚紗的時候發(fā)現(xiàn)自己被綠了宫莱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡哩罪,死狀恐怖授霸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情际插,我是刑警寧澤绝葡,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站腹鹉,受9級特大地震影響藏畅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜功咒,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一愉阎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧力奋,春花似錦榜旦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澡屡。三九已至,卻和暖如春咐旧,著一層夾襖步出監(jiān)牢的瞬間驶鹉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工铣墨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留室埋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓伊约,卻偏偏與公主長得像姚淆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屡律,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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