ios 分類重寫原類方法時,調(diào)用原類方法

ios分類主要是將類的一些類似的功能拆分出去,使得每個分類中的函數(shù)功能統(tǒng)一。

我們經(jīng)常會遇到分類中重寫了原類方法導(dǎo)致原類中的方法被覆蓋了,category的底層實現(xiàn)是在加載的時候,把category中的方法添加到原類的方法列表中,當(dāng)調(diào)用方法時會遍歷方法列表找到對應(yīng)的響應(yīng)子就返回,不再向下遍歷。因為category的優(yōu)先級高于類的優(yōu)先級,使得原類中的選擇子遍歷不到。

聲明一個TestViewController

類中實現(xiàn)了一個test方法

添加兩個分類

TestViewController(ca1)

TestViewController (ca2)

從上面代碼中可以看出,兩個分類都實現(xiàn)了test方法

當(dāng)用[self test]調(diào)用test方法時,調(diào)用的是分類里面的方法

當(dāng)需要調(diào)用TestViewController中的test方法時,可以去遍歷方法列表,去查詢最后一個test方法的selector,然后獲取方法的指針地址來執(zhí)行方法

((void (*)(id, SEL))imp)(self,sel);

((void (*)(id,SEL))objc_msgSend)(self, selector);

第一行代碼是通過方法的IMP來執(zhí)行方法,

第二行代碼是通過消息發(fā)送的形式objc_msgSend的方法去執(zhí)行方法

可以去了解一下方法的IMP和selector的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評論 0 9
  • 轉(zhuǎn)載:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麥子閱讀 828評論 0 2
  • 把網(wǎng)上的一些結(jié)合自己面試時遇到的面試題總結(jié)了一下,以后有新的還會再加進(jìn)來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,657評論 0 20
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,799評論 7 64
  • iPhone 5S發(fā)布了,喜歡的依舊喜歡,不喜歡的依舊不喜歡。在果粉和果黑無休無止的爭論中,蘋果的投資者們默默的數(shù)...
    AaronNotes閱讀 942評論 0 50

友情鏈接更多精彩內(nèi)容