isKindOfClass&isMemberOfClass

在面试的时候被问到了这两个方法的,因为没有看过原代码逻辑,所以搞懵了,在这里学习mark一下

(1)isKindOfClass 判断当前对象的类是否是某个类或者某个类的子类,是的话返回YES

(2)isMemberOfClass 判断当前对象的类是否是某个类,是的话返回YES

    这两个方法分为类方法和实例方法,但是消息的接受者必须是一个对象通过对象获取对象的类与后面的入参类进行对比,实例方法直接通过class方法获取当前对象的对应类;类方法通过object_getClass()方法获取当前类的元类一般元类和类是不相同的,所以如果向类对象发送上面isMemberOfClass类方法,永远是NO,对于isKindOfClass存在一种特殊情况,即NSObject的特殊形式,因为NSObject的元类的父类还是它自己,所以[(id)[NSObject class]isKindOfClass:[NSObject class]]返回的结果是YES。

参照内容:

两个方法内部实现


实例/类/元类关系图
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容