看了好多文章覺得總結的不是我想要的,斗膽再總結一下
load
1、類被系統添加到runtime之前調用;
2、調用順序:父類先于子類,子類先于category(category里的實現不會覆蓋原類實現);
initialize
1、向類發送第一個消息之前調用(系統runtime自動調用的load不算);
2、會先調用父類的實現,再調用子類的實現,如果子類沒有實現,還是調用繼承自父類的。可以看出,父類的實現可能被多次調用。
3、系統對每個類只會發送一次消息(調用);
4、如果category中實現了initialize方法,會覆蓋原先類中已經有的實現(如果有的話。沒有就充當該類的實現);
load 、initialize相同點
1、自定義實現中都不需要顯示調用父類的實現;
2、在不考慮開發者主動使用的情況下,系統最多會調用一次;
3、父類先于子類調用;
應用:
load中可以做method swizzling;
initialize可以初始化全局變量;