欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发 - isKindOfClass,isSubclassOfClass和isMemberOfClass

程序员文章站 2024-01-15 09:12:04
在ios开发中,会遇到需要判断一个对象是否为某类的对象,或者某个子类的对象.判断方法大体有三个iskindofclass,issubclassofclass和ismemberofclass.他们的区...

在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是一个抽象的基类。这种模式就是了类簇模式.