Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does -isMemberOfClass: not work here?

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).

like image 254
openfrog Avatar asked Dec 13 '22 01:12

openfrog


2 Answers

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.

like image 91
Georg Fritzsche Avatar answered Dec 15 '22 13:12

Georg Fritzsche


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.

like image 23
NSResponder Avatar answered Dec 15 '22 14:12

NSResponder