類方法load和initialize的區別


1、+load方法當類或分類添加到object-c runtime時被調用,子類的+load方法會在它所有父類的+load方法之后執行,而分類的+load方法會在它的主類的+load方法之后執行。但不同的類之間的+load方法的調用順序是不確定的,所以不要在此方法中用另一個類。

2、+load方法不像普通方法一樣,它不遵循那套繼承規則。如果某個類本身沒有實現+load方法,那么不管其它各級超類是否實現此方法,系統都不會調用。+load方法調用順序是:SuperClass -->SubClass --> CategaryClass。

3、+initialize是在類或者它的子類接受第一條消息前被調用,但是在它的超類接收到initialize之后。也就是說+initialize是以懶加載的方式被調用的,如果程序一直沒有給某個類或它的子類發送消息,那么這個類的+initialize方法是不會被調用的。

4、+initialize方法和+load方法還有個區別,就是運行期系統完整度上來講,此時可以安全使用並調用任意類中的任意方法。而且,運行期系統也能確保+initialize方法一定會在“線程安全的環境”中執行,這就是說,只有執行+initialize的那個線程可以操作類或類實例,其他線程都要阻塞等着+initialize執行完。

5、+initialize方法和其他類一樣,如果某個類未實現它,而其超類實現了,那么就會運行超類的實現代碼。如果本身和超類都沒有實現,超類的分類實現了,就會去調用分類的initialize方法。如果本身沒有實現,超類和父類的分類實現了就會去調分類的initialize方法。不管是在超類中還是分類中實現initialize方法都會被調多次,調用順序是SuperClass -->SubClass。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM