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

4

3 回答 3

9

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.

于 2009-12-04T00:24:48.670 回答
3

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.

于 2009-12-04T02:05:14.290 回答
1

did you try isKindOfClass instead of isMemberOfClass?

于 2009-12-04T00:23:44.940 回答