开发者

How do I get class information at runtime in Objective-C?

I have NSMutableArray with different objects in it of different classes. Now I want to get the class name, related stuff and also check if the respective object is NSString or not. How should I go about it?

I was trying something like the following. It wasn't working of course.

for(NSString *string in array){
    NSLog(@"Name of the class : %@",开发者_JS百科 [NSString stringWithCString:class_getName(Class id)];


If you're on Mac OS X, you can use [object className], it returns an NSString

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

To check if it's a NSString, you should use something like this:

for(id obj in array) {
    if ([obj isKindofClass:[NSString class]]) {
        // do something
    }
}


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

Take a look at the NSObject class and protocol for other interesting methods.


I have NSMutableArray with different objects in it of different classes. Now I want to get the class name & related stuff & also check if the respective object is NSString or not.

Hold up. Why do have an array of different typed objects in the first place? Could you redo your design to avoid getting into that situation?

As others have said, -isKindOfClass: works. One downside is it generally leads to brittle code. Here your loop needs to know about all the classes that could be in the array. Sometimes this is the best you can do though.

Designs that use -respondsToSelector: tend to be a little more robust. Here your loop would need to know about the behaviors it depends on of classes in the array.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜