美文网首页
关于runtime的objc_getClass和object_g

关于runtime的objc_getClass和object_g

作者: GDCoder | 来源:发表于2021-03-09 11:10 被阅读0次

一、objc_getClass

首先我们看一下objc_getClass的内部实现是:objc_getClass(const char * _Nonnull name) 从这里只能看出需要传入一个字符串的类名, Returns the class definition of a specified class  返回对应的类对象。请看下面的截图

从这里可以看出是runtime的相关的,我们就可以从苹果开源的源码查看分析

源码链接下载链接  找到objc目录下,打开下载数字最大的,代表最新的)

从上面的截图和描述都可以看出,传入的是一个字符串的类名,返回的是对应的类对象。

(有兴趣的可以接看look_up_class对应的实现)。

二.object_getclass

首先我们都知道NSObject的对象类型是有三种:实例对象(instance)、类对象(class)、元类对象(meta-class)。先看源码实现

从这里可以看出,它返回的是isa指针。如果传入的obj是instance对象,返回class对象;如果传入的是class对象,返回meta-class对象;如果传入的是meta-class对象,返回NSObject(基类)的meta-class对象。

下面粘贴调试代码:

总结:

1.objc_getClass(const char * _Nonnull name) 

a.传入字符串类名,返回对应的类对象

2.object_getclass 

a.传入的obj可能是instance对象、class对象、meta-class对象

b.如果是instance对象,返回class对象

c.如果是class对象,返回的是meta-class对象

d.如果是meta-class对象,返回NSObject(基类)的meta-class对象。

接下来我会介绍 instance对象、class对象、meta-class对象区别!如有兴趣请关注我😄!

相关文章

网友评论

      本文标题:关于runtime的objc_getClass和object_g

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