類方法load和initialize的區別

來源:互聯網
上載者:User

標籤:就會   類方法   第一條   --   線程   程式   規則   沒有   方法調用   

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。

類方法load和initialize的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.