Objective c 为什么不是';我的NSMutableArray类型是否为NSMutableArray?

Objective c 为什么不是';我的NSMutableArray类型是否为NSMutableArray?,objective-c,introspection,Objective C,Introspection,我得到了一个NSMutableArray,创建如下: NSMutableArray *expr = [[NSMutableArray alloc] init]; [expr addObject:[NSNumber numberWithDouble:3.0]]; [expr addObject:@"+"]; [expr addObject:@"%x"]; [expr addObject:@"*"]; [expr addObject:[NSNumber nu

我得到了一个NSMutableArray,创建如下:

NSMutableArray *expr = [[NSMutableArray alloc] init]; 
    [expr addObject:[NSNumber numberWithDouble:3.0]];
    [expr addObject:@"+"];
    [expr addObject:@"%x"];
    [expr addObject:@"*"];
    [expr addObject:[NSNumber numberWithDouble:4.0]];
稍后,我将其传递给方法,在该方法中它被称为
(id)anExpression
,我尝试通过内省确定这是什么类型的对象:

if ([[anExpression class] isEqual:[NSMutableArray class]]) {
    // Some code I only want to do if it IS a Mutable array
}
但是,返回false,并且我的代码不会执行。我尝试了
NSLog
'ing
[NSMutableArray class]
,这给了我
NSMutableArray
。不太令人惊讶。
但是当我尝试使用
NSLog
expr
的类时,我得到了
\uu nsarray

为什么会这样?我该怎么解决这个问题


我对Objective-C不太熟悉,请解释一下。我不喜欢做我不懂的事情。

你的支票不正确。应该是

if ([[expr class] isEqual:[NSMutableArray class]]) {


答案在于isKindOfClass——显然,如果您创建了NSMutableArray的子类,您会希望执行为可变数组保留的代码

同样,在您创建的可变数组的类不同于[NSMutableArray class]的地方,必须有一些内部Cocoa实现细节。我不知道原因,但你也不应该在意,你几乎总是想使用isKindOfClass——它也适用于子类

如果你真的想知道。。。
这一切都是关于班级群集的-请看

我将在8分钟内接受。但另一个问题是:正如你们所看到的,我把nsstring和NSNumbers放在里面,但我把它们作为nscfstring和NSCFNumbers取回。为什么?这是核心基础格式。可可格式和核心基础格式之间有一个免费的桥梁(即它们在功能上是平等的)。您可以阅读更多内容,这样您就可以说我可以用带有NSCFString的字符串做任何事情吗?是的,请查看我最后一条评论末尾的链接。我相信您的数组正在发生变化。你能给我们展示更多的代码在哪里使用NSMutableArray吗?没有别的了。这是我对这个数组做的第一件事,除了将它传递给一个方法@RyanPoolosThen我们能看看这个方法吗?我猜你的方法就是问题所在。我们可以看到is接口和实现。
if ([expr isKindOfClass:[NSMutableArray class]]) {