iOS开发你需要知道的

iskindOfClass & isMemberOfClass

2020-09-16  本文已影响0人  含笑州

现象

看下面关于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

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

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

上一篇 下一篇

猜你喜欢

热点阅读