美文网首页AppleDeveloper
OC底层-类方法归属探索

OC底层-类方法归属探索

作者: 含笑州 | 来源:发表于2020-09-16 17:13 被阅读0次

前言

上一篇文章中我们在进行lldb调试的时候,发现实例方法在当前类中,但是类方法不在当前类中,那么这个类方法究竟在哪里呢?

探索

1.lldb指令验证

获取到LGPerson这个类的isa

然后通过这个isa获取当前类的元类,然后去元类中查找方法

我们类方法say666在我们的元类中。

2.代码认证

       LGPerson *person = [LGPerson alloc];

        Class pClass    = object_getClass(person);

   const char *className = class_getName(pClass);

    Class metaClass = objc_getMetaClass(className);

 Method method1 = class_getClassMethod(pClass,@selector(say666));

  Method method2 =class_getClassMethod(metaClass,@selector(say666));

我们发现method1和method2都可以打印出来这个类方法,但是lldb验证的时候确是没有的,我们打开objc源码,查询class_getClassMethod这个方法如下:

我们getMeta这个方法会判断当前类是否是元类,如果是元类直接返回这个方法,如果不是继续查找它的元类,然后返回这个方法,所以类方法是存在元类中的

相关文章

网友评论

    本文标题:OC底层-类方法归属探索

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