iOS difference between isKindOfClass and isMemberOfClass
Solution 1
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.
Solution 2
-
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
Solution 3
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.
Solution 4
isKindOfClass: Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.
isMemberOfClass: Returns a Boolean value that indicates whether the receiver is an instance of a given class.
Solution 5
isKindOfClass-> return YES when the object is instance of that class or instance of a class which is inherited from it.
isMemberOfClass: return YES when the object is instance of that class but No in case: instance of a class which is inherited from it.
example is good enough in jtbandes answer.
Related videos on Youtube
Comments
-
NoodleOfDeath about 2 years
What is the difference between the
isKind(of aClass: AnyClass)
and theisMember(of aClass: AnyClass)
functions in Swift?Original Question in Objective-C
What is the difference between the
isKindOfClass:(Class)aClass
and theisMemberOfClass:(Class)aClass
functions? I know it is something small like, one is global while the other is an exact class match but I need someone to specify which is which please. -
poncha over 11 years@Durga, if this answers your question, you should accept it. Read more about accepting rate here: meta.stackexchange.com/questions/16721/…
-
PruitIgoe almost 11 yearsBut if you have an array of subviews which include UIViews and a UISegmentedControl and you looped through them and set a conditional on class you would need to use isMemberOfClas UIView and isMemberOfClass UISegmentedControl to distinguish between them, no? isKindOfClass would see the UISegmentedControl as a UIView.
-
NoodleOfDeath almost 10 years@Pruitlgoe that is very true. You might use isKindOfClass:[UIView class] to ensure that all objects you are dealing with are UIViews but you would need to use isMemberOfClass:[UIView class] and/or isMemberOfClass:[UISegmentedControl class] inside some conditional statement to indicate any distinct implementation of the views based on their immediate instance class
-
Nikkie over 9 yearsCan you please clear my below doubt? if ([lbl.textColor isMemberOfClass:[UIColor class]]) { // Not Memeber NSLog(@"Not Memeber"); }else { NSLog(@"Not Memeber"); } if ([imgView.image isMemberOfClass:[UIImage class]]) {// Memeber NSLog(@"Memeber"); }else { NSLog(@"Not Memeber"); }
-
Scooter over 5 yearsisKindOfClass will also return YES if the object is an instance of a given class. In other words isMemberOfClass is a subset of isKindOfClass.