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