ios - category重写系统方法的调用顺序是怎么样的?
天蓬老师
天蓬老师 2017-04-18 09:42:19
0
2
534

我知道category方法是可以覆盖系统的方法,但是当有几个category重写同一个方法的时候调用顺序是怎么样子的啊?我开始写代码测试了一下,看不出来是按什么顺序来的,总是后面创建的category的方法被调用,其他的都被覆盖了。。。很想知道这是为什么,怎么证实这一点,依据是什么。。。有知道的朋友指点一下下咯☺

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆 (2)
伊谢尔伦

根據runtime的訊息傳遞機制中的核心函數void objc_msgSend(id self,SEL cmd,...)來傳送訊息,先從目前類別中尋找呼叫的方法,若沒有找到則繼續從其父類別中一層層往上找,那麼對於category重寫同一個方法,則在訊息傳遞的過程中,會最先找到category中的方法並執行該方法。對於多個分類呼叫同一個方法,Xcode在執行時是根據buildPhases->Compile Sources裡面的從上到下順序編譯的,編譯時透過壓棧的方式將多個分類壓棧,根據後進先出的原則,後編譯的會先被調用,當objc_msgSend找到方法並調用之後,就不再繼續傳遞訊息,所以形成所謂上的覆蓋。並不是後面創建的就一定被調用,要看創建之後其在buildPhases->Compile Sources裡面的位置。

    Ty80

    以runtime載入分類方法的順序來覆蓋
    一般實作的就是最後一個載入分類的方法

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!