從《一個(gè)不規(guī)范的 Category 寫(xiě)法導(dǎo)致的“血案”》說(shuō)起—檢查分類(lèi)同名方法

前幾天有一篇文章一個(gè)不規(guī)范的 Category 寫(xiě)法導(dǎo)致的“血案”,很有意思。

測(cè)試代碼如下:

//NSObject+Test.h
@interface NSObject (Test)

- (void)func;

@end

@implementation NSObject (Test)

- (void)func {
    printf("hello, world");
}

@end

在兩個(gè).m文件里引用了NSObject+Test.h,查看Mach-O信息:

Contents of (__DATA_CONST,__objc_catlist) section
0000000100003050 0x100004090 __OBJC_$_CATEGORY_NSObject_$_Test
    name      0x1000015c3 Test
    cls       0x0 _OBJC_CLASS_$_NSObject
    instanceMethods 0x100004058
        entsize 24
        count   2
        name    0x100001638 func
        types   0x100002363 v16@0:8
        imp     0x100000ed0 -[NSObject(Test) func]
        name    0x100001638 func
        types   0x100002363 v16@0:8
        imp     0x100000ea0 -[NSObject(Test) func]

可以看到NSObject只有一個(gè)分類(lèi),但是有兩個(gè)同名方法,他們的函數(shù)地址不同。兩個(gè)方法對(duì)應(yīng)兩次引用。除了會(huì)引起包大小增加,分類(lèi)同名方法的覆蓋(共存)可能因?yàn)閷?shí)現(xiàn)不同,會(huì)引起其他邏輯問(wèn)題,解決這種問(wèn)題可能會(huì)耗費(fèi)不少時(shí)間。

這種情況雖然編譯的時(shí)候會(huì)有警告,但是警告可能會(huì)被忽視掉。因此我
Snake 里增加了類(lèi)重復(fù)方法的檢測(cè)。

snake -d path/to/binary -l path/to/linkmap

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

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

  • 前言 說(shuō)是前言,其實(shí)也是本文誕生的目的。隨著公司業(yè)務(wù)的不斷增加,功能的快速迭代,app的業(yè)務(wù)線(xiàn)越來(lái)越多,代碼體積變...
    夢(mèng)翔_d674閱讀 1,564評(píng)論 0 2
  • 大綱 目錄1. Category 分類(lèi)1.1 Category 的使用場(chǎng)合1.2 Category 中都可以添加哪...
    師大小海騰閱讀 1,156評(píng)論 0 4
  • 面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài) OC內(nèi)存管理 _strong 引用計(jì)數(shù)器來(lái)控制對(duì)象的生命周期。 _weak...
    運(yùn)氣不夠技術(shù)湊閱讀 1,222評(píng)論 0 10
  • 面向?qū)ο蟮娜筇卣?并作簡(jiǎn)單的介紹。 面向?qū)ο蟮娜齻€(gè)基本特征是:封裝、繼承、多態(tài)。 1.封裝是面向?qū)ο蟮奶卣髦?...
    xiny123閱讀 1,643評(píng)論 0 6
  • 目錄:1.Runtime2.NSNotification相關(guān)3.RunLoop4.多線(xiàn)程相關(guān)5.KVO6.Bloc...
    麥子_KB閱讀 1,205評(píng)論 0 14

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