Reputation: 40735
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
if ([arr isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"YEP!!");
} else {
NSLog(@"NO!!");
}
I get always "NO!!" in console. I tried with Array, NSNumber, NSString. All of them don't seem to work. That's strange. As I get it from the docs, this method should return YES if I test agains the class of the object which is subject of the testing. I'm using the Foundation.h, not Core Foundation (if it makes any difference anyways).
Upvotes: 4
Views: 2790
Reputation: 16861
When you create an array using [NSMutableArray arrayWithCapacity:]
, the object you get is actually a member of some concrete subclass of NSMutableArray. NSMutableArray only exists momentarily in the process of creating the concrete instance.
-isMemberOfClass:
returns true if the receiver's isa
pointer is equal to the given class. -isKindOfClass:
returns true if the receiver is a member of the given class or any of its subclasses.
Upvotes: 3
Reputation: 98984
You need to use isKindOfClass:
or respondsToSelector:
as NSArray
and similar are class clusters - you actually get subclasses when creating them. See this answer for some interesting bits on this.
Upvotes: 9