发送给对象的className和isKindOfClass消息

Dev*_*Dev 8 runtime introspection objective-c

我有以下一段代码

NSMutableArray *mutArray = [[NSMutableArray alloc] init];
[mutArray addObject: [NSProcessInfo processInfo]];
[mutArray addObject: @"This is NSString Object"];
[mutArray addObject: [[NSMutableString alloc] initWithString: @"1st Mutable String"]];

for (id element in mutArray){
      NSLog(@" ");
      NSLog(@"Class Name: %@", [element className]);
      NSLog(@"Is Member of NSString: %@", ([element class] isMemberOfClass: [NSString class]) ? YES: NO);
      NSLog(@"Is kind of NSString: %@", ([element class] isKindOfClass: [NSString class]) ? YES: NO);
}
Run Code Online (Sandbox Code Playgroud)

我正在得到以下输出(并期望指出)

Class Name: NSProcessInfo
Is Member of NSString: NO
Is Kind of NSString: NO

Class Name: NSCFString         <-- Expecting NSString
Is Member of NSString: NO      <-- Expecting YES
Is Kind of NSString: NO        <-- Expecting YES

Class Name: NSCFString         <-- Expecting NSMutableString
Is Member of NSString: NO      
Is Kind of NSString: NO        <-- Expecting YES
Run Code Online (Sandbox Code Playgroud)

我在这里错过了一些可怕的简单吗?谢谢!

dme*_*edi 17

使用:

[element isMemberOfClass: [NSString class]]
Run Code Online (Sandbox Code Playgroud)

不:

[[element class] isMemberOfClass: [NSString class]]
Run Code Online (Sandbox Code Playgroud)

NSString和NSMutableString实现为类集群(请参阅文档iPhone版本中的 "字符串对象" ).

所以isKindOfClass:应该返回true但isMemberOfClass:将返回false,因为NSString不是对象的确切类型.