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。