load和initialize

下面是調用load的源碼
調用時刻 runtime加載類、分類的時候 就會調用+(void)load方法
重點:load方法不是通過消息發(fā)送機制調用的?。。。?br> category也可以實現(xiàn)+load方法 并且都會執(zhí)行
先調用類的load方法 再調用分類的load
父類的load會比子類的先走
整體調用順序是 父類load - 子類load - 父類分類load - 子類分類load

image.png

image.png

image.png

image.png

initialize在 這個類第一次接收到消息調用 調用方式是通過消息發(fā)送機制調用的 但是和消息發(fā)送不同的是 調用initialize之前會調用父類的initialize (如果父類沒有走過initialize方法 走過了就不會調用了 )
如果子類沒有實現(xiàn)initialize 會調用父類的initialize
比如 B和C都是A的子類 并且只有A實現(xiàn)了initialize方法 調用[B alloc];[C alloc]的話
B alloc會先調用父類A的initialize方法 然后調用B的initialize方法 但是B沒有實現(xiàn)initialize 所有就會調用父類的initialize 也就是A的initialize
C alloc和B的邏輯一樣 只不過A已經調用過initialize 所以只會調用C的initialize 但是C沒實現(xiàn) 所有調用A的initialize
所以A的initialize方法會走三次

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容