美文网首页
从《一个不规范的 Category 写法导致的“血案”》说起—检

从《一个不规范的 Category 写法导致的“血案”》说起—检

作者: flexih | 来源:发表于2020-03-30 19:18 被阅读0次

前几天有一篇文章一个不规范的 Category 写法导致的“血案”,很有意思。

测试代码如下:

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

- (void)func;

@end

@implementation NSObject (Test)

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

@end

在两个.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只有一个分类,但是有两个同名方法,他们的函数地址不同。两个方法对应两次引用。除了会引起包大小增加,分类同名方法的覆盖(共存)可能因为实现不同,会引起其他逻辑问题,解决这种问题可能会耗费不少时间。

这种情况虽然编译的时候会有警告,但是警告可能会被忽视掉。因此我
Snake 里增加了类重复方法的检测。

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

-[NSObject(Test)#TCat func]

相关文章

  • 从《一个不规范的 Category 写法导致的“血案”》说起—检

    前几天有一篇文章一个不规范的 Category 写法导致的“血案”,很有意思。 测试代码如下: 在两个.m文件里引...

  • vue构建报错templateLoader.js

    写在前面的话:一般情况下报这个错,都是某个组件的写法不规范导致。 遇到的具体情况: 依赖包使用cnpm安装的时候没...

  • webpack

    模块化: 命名冲突 文件依赖 模块化编程: 函数写法 对象写法 立即执行函数写法 CommonJS规范AMD规范 ...

  • RN中OC给JS发消息崩溃报错:bridge is not se

    该崩溃报错是由于写法不规范导致的 一、官方文档和不合理想法 1.官方文档 2.不合理想法 由于该文档只是点明了ca...

  • 是时候真的从HTML4转到HTML5了

    页面结构 常规写法 HTML5写法 图像的摆放 传统网页中经常会使用到图像 存在的问题: 如果图片大小不规范,难以...

  • Category

    Category Category 也叫做分类,可以在不创建子类的情况下为一个类扩展功能。 Category 的作...

  • 从写规范字说起

    卢梭在《爱弥儿》下第四卷(续)里讲到:"良心始终是不顾一切人为的法则而顺从自然的秩序的。要想禁止我们做这样或做那样...

  • 微电影短视频剧本常见问题

    一、微电影剧本格式不规范 格式不规范是新手作品常出现的问题,很多人甚至搞不清剧本跟小说的写法到底有什么不同。微电影...

  • 谈谈开发中的规范问题

    我相信软件开发人员都多多少少听说过「规范」一词,如:"这段代码很规范!","这种写法不遵守规范!"等,而随着软件行...

  • 睡眠管家

    你是否是一个不自律的人?又或者是经常是一个作息时间不规范的人?长期的作息时间不规范会导致身体的亚健康,睡眠管家是一...

网友评论

      本文标题:从《一个不规范的 Category 写法导致的“血案”》说起—检

      本文链接:https://www.haomeiwen.com/subject/jjtbuhtx.html