isKindOfClass和isMemberOfClass 都是NSObject的比较Class的方法。
 
但两个有很大区别:
isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员。
isMemberOfClass只能确定一个对象是否是当前类的成员。
 
例如:
NSArray *arr1 = [NSArrayarray];
NSArray *arr2 = [NSArrayarray];
NSObject *ob = [[NSObjectalloc] init]; NSLog(@"%hhd", [[NSArrayarray] isKindOfClass:[NSObjectclass]]); // YES
NSLog(@"%hhd", [[NSArrayarray] isMemberOfClass:[NSArrayclass]]); // NO
NSLog(@"%hhd", [arr1 isKindOfClass:[ob class]]); // YES
NSLog(@"%hhd", [arr1 isMemberOfClass:[ob class]]); // NO
NSLog(@"%hhd", [arr1 isKindOfClass:[arr2 class]]); // YES
NSLog(@"%hhd", [arr1 isMemberOfClass:[arr2 class]]); // YES
 
[[NSArray array] isMemberOfClass:[NSArray class]]返回NO的原因在于NSArray是一个类簇,意味着每个NSArray的实例都是NSArray内部子类的一个实例,我们会发现[[NSArray array] class]返回值为__NSArray0, 而[NSArray class]返回值为NSArray,所以二者不等。
 
05-11 13:26