iOS下isMemberOfClass和isKindOfClass的区别

关于面试中经常会问到isMemberOfClass和isKindOfClass区别,大家可能都能回答出一一二二,但是为什么这样呢?下面我们来一起探讨一下。

首先我们看一下isMemberOfClass 的底层实现:

isMemberOfClass下类方法和实例方法的底层实现
object_getClass 底层实现

从上图我们不难看出 isMemberOfClass 方法在底层进行调用时,就是对类的本身进行一个判断,也就是说不会进行更多的操作。

下面我们看一下isKindOfClass的底层实现:


isKindOfClass下类方法和实例方法的底层实现

从上述代码片段我们不难看出,isKindOfClass的判断不仅仅是判断是当前类,还会逐级的根据继承关系向上查找,在类方法下会一直进行查找直到根元类,在对象方法中则会一直查找到基类。

以上就是个人理解的二者的区别,如有错误,敬请指出。

你可能感兴趣的:(iOS下isMemberOfClass和isKindOfClass的区别)