为什么不[NSArray类]返回我的预期?

use*_*940 1 iphone parsing nsarray

我试图通过Web服务解析一些JSON.逻辑是:

id jsonObject = ....;      //This can be string or array 

if([jsonObject class] == [NSString class] || [jsonObject class] == [NSMutableString class]{

// DO some thing
}
else if([jsonObject class] = [NSArray class] || [jsonObject class] == [NSMutableArray class]{

// Do some thing else
}
Run Code Online (Sandbox Code Playgroud)

然而,对于其中一个元素,我遇到了一个奇怪的问题.这个元素的类应该是NSArray,但是当我运行代码时,我将该类视为__NSArrayM.这与第二个if块不匹配.

有人可以告诉我我做错了什么

小智 5

改为使用:

if ([jsonObject isKindOfClass:[NSArray class]]) {
}
Run Code Online (Sandbox Code Playgroud)

对于类集群,这是唯一正确的方法 - isKindOfClass检查对象是类的实例还是其子类之一.有一个类似的方法,isMemberOfClass:,它测试严格的类相等/成员资格(即没有子类实例被认为是相等的).