從方法調用棧中货岭,找到了系統(tǒng)在執(zhí)行 load 前調用的方法:
1.啟動 dyld,將二進制文件初始化
2.ImageLoader 把二進制文件加載進內存
3.runtime 執(zhí)行 load_images ,執(zhí)行所有的 load 方法
使用一個全局數(shù)組從含有 load 方法的根父類到自身尊浪,依次添加
使用另一個全局數(shù)組添加含有 load 方法的所有分類
依次執(zhí)行存儲的 load 方法典予,父類 -> 自身 -> 分類
4.執(zhí)行自定義的 load 方法
+ (void)load;
對于加入運行期系統(tǒng)的類及分類,必定會調用此方法潘飘,且僅調用一次飘蚯。
iOS會在應用程序啟動的時候調用load方法馍迄,在main函數(shù)之前調用
執(zhí)行子類的load方法前,會先執(zhí)行所有超類的load方法局骤,順序為父類->子類->分類
在load方法中使用其他類是不安全的攀圈,因為會調用其他類的load方法,而如果關系復雜的話峦甩,就無法判斷出各個類的載入順序赘来,類只有初始化完成后,類實例才能進行正常使用
load 方法不遵從繼承規(guī)則凯傲,如果類本身沒有實現(xiàn)load方法犬辰,那么系統(tǒng)就不會調用,不管父類有沒有實現(xiàn)(跟下文的initialize有明顯區(qū)別)
盡可能的精簡load方法冰单,因為整個應用程序在執(zhí)行l(wèi)oad方法時會阻塞幌缝,即,程序會阻塞直到所有類的load方法執(zhí)行完畢诫欠,才會繼續(xù)
load 方法中最常用的就是方法交換method swizzling