iOS difference between isKindOfClass and isMemberOfClass iOS difference between isKindOfClass and isMemberOfClass ios ios

iOS difference between isKindOfClass and isMemberOfClass


isKindOfClass: returns YES if the receiver is an instance of the specified class or an instance of any class that inherits from the specified class.

isMemberOfClass: returns YES if, and only if, the receiver is an instance of the specified class.

Most of the time you want to use isKindOfClass: to ensure that your code also works with subclasses.

The NSObject Protocol Reference talks a little more about these methods.


  • isKindOfClass: indicates whether an object inherits from a given class
  • isMemberOfClass: indicates whether an object is an instance of a given class.

[[NSMutableData data] isKindOfClass:[NSData class]]; // YES[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO


Suppose

@interface A : NSObject @end@interface B : A@end...id b = [[B alloc] init];

then

[b isKindOfClass:[A class]] == YES;[b isMemberOfClass:[A class]] == NO;

Basically, -isMemberOfClass: is true if the instance is exactly of the specified class, while -isKindOfClass: is true if the instance is exactly of the specified class or if one of the instance's ancestors is of the specified class.

-isMemberOfClass: is seldom used.