下面是調(diào)用load的源碼
調(diào)用時刻 runtime加載類、分類的時候 就會調(diào)用+(void)load方法
重點(diǎn):load方法不是通過消息發(fā)送機(jī)制調(diào)用的!!!!
category也可以實(shí)現(xiàn)+load方法 并且都會執(zhí)行
先調(diào)用類的load方法 再調(diào)用分類的load
父類的load會比子類的先走
整體調(diào)用順序是 父類load - 子類load - 父類分類load - 子類分類load
initialize在 這個類第一次接收到消息調(diào)用 調(diào)用方式是通過消息發(fā)送機(jī)制調(diào)用的 但是和消息發(fā)送不同的是 調(diào)用initialize之前會調(diào)用父類的initialize (如果父類沒有走過initialize方法 走過了就不會調(diào)用了 )
如果子類沒有實(shí)現(xiàn)initialize 會調(diào)用父類的initialize
比如 B和C都是A的子類 并且只有A實(shí)現(xiàn)了initialize方法 調(diào)用[B alloc];[C alloc]的話
B alloc會先調(diào)用父類A的initialize方法 然后調(diào)用B的initialize方法 但是B沒有實(shí)現(xiàn)initialize 所有就會調(diào)用父類的initialize 也就是A的initialize
C alloc和B的邏輯一樣 只不過A已經(jīng)調(diào)用過initialize 所以只會調(diào)用C的initialize 但是C沒實(shí)現(xiàn) 所有調(diào)用A的initialize
所以A的initialize方法會走三次