看了好多文章覺得總結(jié)的不是我想要的维费,斗膽再總結(jié)一下
load
1、類被系統(tǒng)添加到runtime之前調(diào)用;
2裳凸、調(diào)用順序:父類先于子類,子類先于category(category里的實現(xiàn)不會覆蓋原類實現(xiàn))劝贸;
initialize
1姨谷、向類發(fā)送第一個消息之前調(diào)用(系統(tǒng)runtime自動調(diào)用的load不算);
2映九、會先調(diào)用父類的實現(xiàn)梦湘,再調(diào)用子類的實現(xiàn),如果子類沒有實現(xiàn)件甥,還是調(diào)用繼承自父類的践叠。可以看出嚼蚀,父類的實現(xiàn)可能被多次調(diào)用禁灼。
3、系統(tǒng)對每個類只會發(fā)送一次消息(調(diào)用)轿曙;
4弄捕、如果category中實現(xiàn)了initialize方法,會覆蓋原先類中已經(jīng)有的實現(xiàn)(如果有的話导帝。沒有就充當該類的實現(xiàn))守谓;
load 、initialize相同點
1您单、自定義實現(xiàn)中都不需要顯示調(diào)用父類的實現(xiàn)斋荞;
2、在不考慮開發(fā)者主動使用的情況下虐秦,系統(tǒng)最多會調(diào)用一次平酿;
3、父類先于子類調(diào)用悦陋;
應(yīng)用:
load中可以做method swizzling蜈彼;
initialize可以初始化全局變量;