isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法,但两个有很大区别:
-
isKindOfClass
来确定一个对象是否是一个类的成员,或者是派生自该类的成员 -
isMemberOfClass
只能确定一个对象是否是当前类的成员
例如:我们已经成NSObject
派生了自己的类,isMemberOfClass
不能检测任何的类都是基于NSObject
类这一事实,而isKindOfClass
可以。
例:
[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
- (void) testIsKindOfClass {
Class1 *c1=[Class1 new];
if ([c1 isKindOfClass: [NSObject class]]) {
NSLog(@"c1 is a kind of NSObject.");
}
if ([c1 isMemberOfClass:[Class1 class]]) {
NSLog(@"c1 is Member of Class1 !");
}
if (![c1 isMemberOfClass:[NSObject class]]) {
NSLog(@"c1 is't Member of NSObject !");
}
}
输出结果:
c1 is a kind of NSObject .
c1 is Member of Class1 !
c1 is't Member of NSObject !