1.調(diào)用方式
1.1 load是根據(jù)函數(shù)地址直接調(diào)用
1.1 initialize是通過(guò)objc_msgSend調(diào)用
2.調(diào)用時(shí)刻
2.1 load是runtime加載類,加載分類的時(shí)候調(diào)用(只會(huì)調(diào)用一次)
2.2 initialize是類第一次接收到消息的時(shí)候調(diào)用,每一個(gè)類只會(huì)initialize一次(父類的initialize方法可能會(huì)被調(diào)用多次.取決于子類是是否有重寫(xiě)initialize,如果沒(méi)有就會(huì)通過(guò)superclass去父類里面找)
- load和initialize的調(diào)用順序
3.1load
3.1.1先調(diào)用類的load
3.1.1.1先編譯的類優(yōu)先調(diào)用load
3.1.1.2調(diào)用子類的load之前,會(huì)先調(diào)用父類的load
3.1.2 在調(diào)用分類的load
3.1.2.1先編譯的分類優(yōu)先調(diào)用load
4.1 initialize
4.1.1先初始化父類
4.1.2再初始化子類(可能最終調(diào)用的是父類的initialize方法,取決于子類是是否有重寫(xiě)initialize,如果沒(méi)有就會(huì)通過(guò)superclass去父類里面找)