关于runtime的objc_getClass和object_getclass

31 篇文章 0 订阅
本文详细解析了objc_getClass与object_getclass两个Objective-C运行时函数的内部实现及使用方法。objc_getClass通过类名获取类对象,而object_getclass则根据不同类型的输入返回不同的对象类别。
摘要由CSDN通过智能技术生成

一、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对象区别!如有兴趣请关注我😄!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值