为什么-isMemberOfClass:不在这里工作?

时间:2009-12-04 00:19:37

标签: objective-c cocoa foundation

NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];

if ([arr isMemberOfClass:[NSMutableArray class]]) {
    NSLog(@"YEP!!");
} else {
    NSLog(@"NO!!");
}

我总是“不!”在控制台。我尝试使用Array,NSNumber,NSString。所有这些似乎都不起作用。真奇怪。当我从文档中得到它时,如果我再次测试作为测试对象的对象的类,则此方法应该返回YES。我使用的是Foundation.h,而不是Core Foundation(如果它有任何不同之处)。

3 个答案:

答案 0 :(得分:9)

您需要使用isKindOfClass:respondsToSelector:作为NSArray,类似的是class clusters - 您在创建子类时实际上会获得子类。有关这方面的一些有趣内容,请参阅this answer

答案 1 :(得分:3)

使用[NSMutableArray arrayWithCapacity:]创建数组时,您获得的对象实际上是NSMutableArray的某个具体子类的成员。 NSMutableArray仅在创建具体实例的过程中暂时存在。

如果接收者的-isMemberOfClass:指针等于给定的类,则

isa返回true。如果接收者是给定类或其任何子类的成员,则-isKindOfClass:返回true。

答案 2 :(得分:1)

你尝试过isKindOfClass而不是isMemberOfClass吗?