在iOS开发中,会遇到需要判断一个对象是否为某类的对象,或者某个子类的对象.判断方法大体有三个isKindOfClass,isSubclassOfClass和isMemberOfClass.他们的区别是什么呢?下面通过代码来验证一下.

创建父子类关系的类对象
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
创建对象
测试1:isKindOfClass
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isKindOfClass测试
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isKindOfClass测试结果
测试2:isSubclassOfClass
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isSubclassOfClass测试
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isSubclassOfClass测试结果
测试3:isMemberOfClass
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isMemberOfClass测试
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
测试结果

结果表明isSubclassOfClass和isKindOfClass的作用基本上是一致都是用来判断一个对象或一个类是否为某个类或者某个类的子类.
isMemberOfClass 有所不同,只有当类型完全匹配的时候才会返回YES。

补充:附加测试(isMemberOfClass)
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
isMemberOfClass附加测试
iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
测试结果

结果令人意外bool7为假,难道上面得出的结论是错误的么?或者textArr不是 NSArray 类型的?打印了一下textArr 结果发现结果为

iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass
textArr类型为NSArray0


原来textArr 不是NSArray类型实例,通过不同方法实例化的array都是NSArray子类的实例,NSArray是一个抽象的基类。这种模式就是了类簇模式.



作者:Clover_B
链接:http://www.jianshu.com/p/47f53e9e3a64
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • 2021-11-22
  • 2022-12-23
  • 2021-06-20
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2022-01-04
  • 2022-12-23
  • 2021-09-20
相关资源
相似解决方案