isKindOfClass: / isMemberOfClass: 区别

如果多个子类继承一个父类,在某些场景中可能遇到需要判断子类的类型

1、已知父类 Father,子类 Son1Son2

Son1 * s1 = [[Son1 alloc] init];

[s1 isKindOfClass:[Father class]]       //返回 YES
[s1 isKindOfClass:[Son2 class]]         //返回 YES

[s1 isMemberOfClass:[Father class]]      //返回 NO
[s1 isMemberOfClass:[Son2 class]]        //返回 NO
[s1 isMemberOfClass:[Son1 class]]        //返回 YES
  • isKindOfClass: 对比的是该子类的父类类型
  • isMemberOfClass: 对比的是该子类的类型

2、下面打印的是什么


isKindOfClass: / isMemberOfClass: 区别_第1张图片
  • 答案:两个都是子类的类型
  • 这里的super仅仅是一个编译指示器,并不是一个对象,[super class]的本质还是让当前对象调用父类的class方法。

你可能感兴趣的:(isKindOfClass: / isMemberOfClass: 区别)