iOS之isKindOfClass与isMemberOfClass、isSubclassOfClass的总结

先看官方文档:

一、isKindOfClass 实例方法

- (BOOL)isKindOfClass:(Class)aClass
Description    
Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)
 
//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类 或者 继承于参数类。 

二、isMemberOfClass 实例方法

- (BOOL)isMemberOfClass:(Class)aClass
Description    
Returns a Boolean value that indicates whether the receiver is an instance of a given class. (required)
 
//意思是返回一个BOOL类型的值,表示调用该方法的类 是否是 参数类 

三、 isSubclassOfClass 类方法

//注意这是一个类方法
+ (BOOL)isSubclassOfClass:(Class)aClass
Description    
Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.
 
//意思是返回一个BOOL类型的值,表示调用该方法的类 是不是 参数类的一个子类 或者 是这个类的本身


综上看来:
1、isKindOfClass:表示接收者是给定类的实例还是从该类继承的任何类的实例
2、isMemberOfClass:表示接收者是否为给定类的实例

3、 isSubclassOfClass和isKindOfClass的作用基本上是一致的,只不过一个是类方法,一个是实例方法。

 isMemberOfClass 筛选条件更为苛刻,只有当类型完全匹配的时候才会返回YES。

@interface Person : NSObject
@interface Jack : Person

Jack继承自Person
isKindOfClass可以判断[Jack new]是Jack的实例,还是Person的实例
而isMemberOfClass只能判断[Jack new]是Jack的实例,但不是Person的实例

    Jack *jack = [Jack new];
    BOOL a = [jack isKindOfClass:[Person class]];
    BOOL b = [jack isKindOfClass:[Jack class]];
    BOOL c = [jack isMemberOfClass:[Person class]];
    BOOL d = [jack isMemberOfClass:[Jack class]];
    NSLog(@"%d--%d--%d--%d",a,b,c,d); 

输出:
1--1--0--1
注意使用类对象判断NSObject时(根元类的isa指向自己)

    BOOL a = [(id)[Jack class] isKindOfClass:[Person class]];
    BOOL b = [(id)[Jack class] isKindOfClass:[Jack class]];
    BOOL c = [(id)[Person class] isKindOfClass:[NSObject class]];
    BOOL d = [(id)[NSObject class] isKindOfClass:[NSObject class]];
    BOOL e = [(id)[Jack class] isMemberOfClass:[Person class]];
    BOOL f = [(id)[Jack class] isMemberOfClass:[Jack class]];
    BOOL g = [(id)[Jack class] isMemberOfClass:[NSObject class]];
    BOOL h = [(id)[NSObject class] isMemberOfClass:[NSObject class]];
    NSLog(@"%d--%d--%d--%d--%d--%d--%d--%d",a,b,c,d,e,f,g,h);

输出:
0--0--1--1--0--0--0--0

BOOL w = [Jack isSubclassOfClass:[Person class]];//YES
BOOL n = [jack isSubclassOfClass:[Jack class]];//YES  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值