如何在Objective-C中在运行时获取类信息?

Asa*_*han 3 cocoa objective-c

我有NSMutableArray,其中包含不同类的不同对象.现在我想获取类名,相关内容,并检查相应的对象是否为NSString.我该怎么办呢?

我正在尝试类似以下内容.它当然不起作用.

for(NSString *string in array){
    NSLog(@"Name of the class : %@", [NSString stringWithCString:class_getName(Class id)];
Run Code Online (Sandbox Code Playgroud)

Jes*_*rez 6

如果您使用的是Mac OS X,则可以使用[object className],它会返回NSString

for(id obj in array) NSLog(@"Name of the class: %@", [obj className]);
Run Code Online (Sandbox Code Playgroud)

要检查它是否是NSString,您应该使用以下内容:

for(id obj in array) {
    if ([obj isKindofClass:[NSString class]]) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Asad的`-className`方法仅存在于Mac上.对于iPhone上的相同功能,请使用`NSStringFromClass([obj class])`. (7认同)
  • 我通常建议甚至在Mac上使用NSStringFromClass(),因为-className是*打算用于编写脚本; 没有内省. (7认同)

Joo*_*ost 6

for(id object in array){
    NSLog(@"Name of the class: %@", [object className]);
    NSLog(@"Object is a string: %d", [object isKindOfClass:[NSString class]]);
}
Run Code Online (Sandbox Code Playgroud)

看看NSObject 协议,了解其他有趣的方法.