load + initialize 介紹

+ (void)load;
1.對(duì)于加入運(yùn)行期系統(tǒng)的類及分類,必定會(huì)調(diào)用此方法,且僅調(diào)用一次。
2.iOS在應(yīng)用程序啟動(dòng)時(shí)候調(diào)用load方法,在main函數(shù)之前。
3.執(zhí)行順序?yàn)椋焊割?---> 子類 ---> 分類
4.在load方法中使用其他類是不安全的,因?yàn)闀?huì)調(diào)用其他類的load方法,而如果關(guān)系復(fù)雜的話,就無法判斷出各個(gè)類的載入順序,類只有初始化完成后,類實(shí)例才能進(jìn)行正常使用。
5.load 方法不遵從繼承規(guī)則,如果類本身沒有實(shí)現(xiàn)load方法,那么系統(tǒng)就不會(huì)調(diào)用,不管父類有沒有實(shí)現(xiàn)(跟下文的initialize有明顯區(qū)別)。
6.盡可能的精簡(jiǎn)load方法,因?yàn)檎麄€(gè)應(yīng)用程序在執(zhí)行l(wèi)oad方法時(shí)會(huì)阻塞,即,程序會(huì)阻塞直到所有類的load方法執(zhí)行完畢,才會(huì)繼續(xù)。
7.load 方法中最常用的就是方法交換method swizzling。
+ (void)initialize;
1.在首次使用該類之前由運(yùn)行期系統(tǒng)(非人為)調(diào)用,且僅調(diào)用一次。
2.惰性調(diào)用,只有當(dāng)程序使用相關(guān)類時(shí),才會(huì)調(diào)用。
3.運(yùn)行期系統(tǒng)會(huì)確保initialize方法是在線程安全的環(huán)境中執(zhí)行,即,只有執(zhí)行initialize的那個(gè)線程可以操作類或類實(shí)例。其他線程都要先阻塞,等待initialize執(zhí)行完。
3.如果類未實(shí)現(xiàn)initialize方法,而其超類實(shí)現(xiàn)了,那么會(huì)運(yùn)行超類的實(shí)現(xiàn)代碼,而且會(huì)運(yùn)行兩次
4. 類別會(huì)覆蓋類中的方法,只執(zhí)行一個(gè)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容