+(void)load +(void)initialize
Apple的文檔很清楚地說明了initialize和load的區(qū)別在于:load是只要類所在文件被引用就會被調用,而initialize是在類或者其子類的第一個方法被調用前調用。所以如果類沒有被引用進項目,就不會有l(wèi)oad調用;但即使類文件被引用進來,但是沒有使用,那么initialize也不會被調用。
它們的相同點在于:方法只會被調用一次。(其實這是相對runtime來說的,后邊會做進一步解釋)。
文檔也明確闡述了方法調用的順序:父類(Superclass)的方法優(yōu)先于子類(Subclass)的方法,類中的方法優(yōu)先于類別(Category)中的方法。
執(zhí)行時機
在程序運行后立即執(zhí)行
在類的方法第一次被調時執(zhí)行
若自身未定義,是否沿用父類的方法? 否 是
類別中的定義 全都執(zhí)行,但后于類中的方法
覆蓋類中的方法,只執(zhí)行一個