84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我知道category方法是可以覆盖系统的方法,但是当有几个category重写同一个方法的时候调用顺序是怎么样子的啊?我开始写代码测试了一下,看不出来是按什么顺序来的,总是后面创建的category的方法被调用,其他的都被覆盖了。。。很想知道这是为什么,怎么证实这一点,依据是什么。。。有知道的朋友指点一下下咯☺
欢迎选择我的课程,让我们一起见证您的进步~~
根據runtime的訊息傳遞機制中的核心函數void objc_msgSend(id self,SEL cmd,...)來傳送訊息,先從目前類別中尋找呼叫的方法,若沒有找到則繼續從其父類別中一層層往上找,那麼對於category重寫同一個方法,則在訊息傳遞的過程中,會最先找到category中的方法並執行該方法。對於多個分類呼叫同一個方法,Xcode在執行時是根據buildPhases->Compile Sources裡面的從上到下順序編譯的,編譯時透過壓棧的方式將多個分類壓棧,根據後進先出的原則,後編譯的會先被調用,當objc_msgSend找到方法並調用之後,就不再繼續傳遞訊息,所以形成所謂上的覆蓋。並不是後面創建的就一定被調用,要看創建之後其在buildPhases->Compile Sources裡面的位置。
以runtime載入分類方法的順序來覆蓋一般實作的就是最後一個載入分類的方法
根據runtime的訊息傳遞機制中的核心函數void objc_msgSend(id self,SEL cmd,...)來傳送訊息,先從目前類別中尋找呼叫的方法,若沒有找到則繼續從其父類別中一層層往上找,那麼對於category重寫同一個方法,則在訊息傳遞的過程中,會最先找到category中的方法並執行該方法。對於多個分類呼叫同一個方法,Xcode在執行時是根據buildPhases->Compile Sources裡面的從上到下順序編譯的,編譯時透過壓棧的方式將多個分類壓棧,根據後進先出的原則,後編譯的會先被調用,當objc_msgSend找到方法並調用之後,就不再繼續傳遞訊息,所以形成所謂上的覆蓋。並不是後面創建的就一定被調用,要看創建之後其在buildPhases->Compile Sources裡面的位置。
以runtime載入分類方法的順序來覆蓋
一般實作的就是最後一個載入分類的方法