Objective c 为什么不是';我的NSMutableArray类型是否为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 *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]]) {