现象
看下面关于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
类方法: 当前类的元类 与 传入类 对比
实例方法:当前类 与 传入类 对比
网友评论