iOS(swift) oc與swift方法拓展測試

一個小小的category測試記錄

OC

原始方法


分類A:

打印:
2022-08-05 17:25:34.478427+0800 categorytest[8166:2349174] aaaa
分類會覆蓋掉類的方法實現(xiàn)
新增分類B

打印
2022-08-05 17:29:35.359009+0800 categorytest[8287:2353507] bbbb
分類B的方法實現(xiàn)覆蓋掉A的方法實現(xiàn)
這里做一步文件切換操作


分類A.m移動到分類B.m下面,重新測試打印
2022-08-05 17:31:43.329272+0800 categorytest[8345:2355915] aaaa
文件編譯順序影響了分類同名方法執(zhí)行順序,文件在下的文件先執(zhí)行.

原理

Category編譯之后底層結構是struct category_t,里面存儲著分類的對象方法、類方法、屬性、協(xié)議信息。程序運行的時候,runtime將category的數(shù)據(jù)合并到類信息中,并且分類信息位于類信息前面。分類方法是后編譯的優(yōu)先調用。

Swift

同一模塊內, 同名extension方法報錯

利用frameworka突破同名方法extension限制

打印APP的aaaa
framework的framea aaaa方法沒有打印

增加frameworkb同名方法,去掉APP的同名


報錯使用aaaa()不明確
結論: Swift在編譯層已經阻止了這種同名方法拓展行為,利用framework的拓展,仍然使用的本模塊內的方法.

PS: 面試題中最常問的,往往是同名category執(zhí)行順序,這個問題的前提是這個oc的編譯執(zhí)行順序,而swift的編譯階段直接就會報錯.

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容