iskindOfClass & isMemberOfClass 的理解

现象

看下面关于iskindOfClass & isMemberOfClass的代码,分析出最终结果

iskindOfClass & isMemberOfClass 类方法调用:

iskindOfClass & isMemberOfClass 实例方法调用:

打印结果如下

分析

isKindOfClass 源码解析(类方法 & 实例方法 )

类方法:

类方法

实例方法:

实例方法

我们在断点调试源码的时候,我们发现上面的类方法和实例方法是不走的,它的方法如下:

我们发现NSObject的isa是它自己本身,所以re1和re5为1,LGPerson class的isa是它的元类,所以re3为0,LGPerson alloc的isa是LGPerson class,所以re7为1

isMemberOfClass 源码解析(类方法 & 实例方法 )

类方法:

我们发现它会拿当前类的元类和传入类进行比较,所以re2和re4都为0

实例方法:

我们发现这个方法会拿当前类直接和传入的类进行比较,所以re6和re8都为1

总结

isKindOfClass

元类 --> 根元类 --> 父类  与 传入类的对比

isMemberOfClass

类方法: 当前类的元类 与 传入类 对比

实例方法:当前类 与 传入类 对比

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容