在面试的时候被问到了这两个方法的,因为没有看过原代码逻辑,所以搞懵了,在这里学习mark一下
(1)isKindOfClass 判断当前对象的类是否是某个类或者某个类的子类,是的话返回YES
(2)isMemberOfClass 判断当前对象的类是否是某个类,是的话返回YES
这两个方法分为类方法和实例方法,但是消息的接受者必须是一个对象,通过对象获取对象的类与后面的入参类进行对比,实例方法直接通过class方法获取当前对象的对应类;类方法通过object_getClass()方法获取当前类的元类,一般元类和类是不相同的,所以如果向类对象发送上面isMemberOfClass类方法,永远是NO,对于isKindOfClass存在一种特殊情况,即NSObject的特殊形式,因为NSObject的元类的父类还是它自己,所以[(id)[NSObject class]isKindOfClass:[NSObject class]]返回的结果是YES。
参照内容:


网友评论