iOS之isKindOfClass与isMemberOfClass的区别

isKindOfClass与isMemberOfClass都是用来比较给定类的实例是否属于某个class
区别:
1、isKindOfClass:表示接收者是给定类的实例还是从该类继承的任何类的实例
2、isMemberOfClass:表示接收者是否为给定类的实例
比方说: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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容