Как получить информацию о классе во время выполнения в Objective-C? - PullRequest
3 голосов
/ 15 ноября 2009

У меня есть NSMutableArray с разными объектами разных классов. Теперь я хочу получить имя класса, связанные вещи, а также проверить, является ли соответствующий объект NSString или нет. Как мне это сделать?

Я пытался что-то вроде следующего. Конечно, это не сработало.

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

Ответы [ 3 ]

6 голосов
/ 15 ноября 2009
for(id object in array){
    NSLog(@"Name of the class: %@", [object className]);
    NSLog(@"Object is a string: %d", [object isKindOfClass:[NSString class]]);
}

Посмотрите на NSObject класс и протокол для других интересных методов.

6 голосов
/ 15 ноября 2009

Если вы работаете в Mac OS X, вы можете использовать [object className], он возвращает NSString

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

Чтобы проверить, является ли это строкой NSString, вы должны использовать что-то вроде этого:

for(id obj in array) {
    if ([obj isKindofClass:[NSString class]]) {
        // do something
    }
}
1 голос
/ 16 ноября 2009

У меня есть NSMutableArray с разными объектами разных классов. Теперь я хочу получить имя класса и прочее, а также проверить, является ли соответствующий объект NSString или нет.

Подожди. Почему в первую очередь массив различных типизированных объектов? Не могли бы вы переделать свой дизайн, чтобы не попасть в такую ​​ситуацию?

Как уже говорили другие, -isKindOfClass: работает. Один недостаток - это обычно приводит к хрупкому коду. Здесь ваш цикл должен знать обо всех классах, которые могут быть в массиве. Хотя иногда это лучшее, что вы можете сделать.

Проекты, которые используют -respondsToSelector: имеют тенденцию быть немного более устойчивыми. Здесь ваш цикл должен знать о поведении, от которого зависит класс в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...