openfrog
openfrog

Reputation: 40735

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

Upvotes: 4

Views: 2790

Answers (3)

NSResponder
NSResponder

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

Georg Fritzsche
Georg Fritzsche

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

ennuikiller
ennuikiller

Reputation: 46965

did you try isKindOfClass instead of isMemberOfClass?

Upvotes: 1

Related Questions