Objective-C предлагает несколько методов самоанализа через систему времени выполнения.
Вы можете спросить объект, если он принадлежит к определенному виду, или ответы на определенное сообщение.
for (id anObject in array ){
if([anObject isKindOfClass:[MyClass class]]){
MyOtherClass *obj = anObject.myProperty ;
NSLog(@"%@", obj);
}
}
и
for (id anObject in array ){
if( [anObject respondsToSelector:@selector(aMethod)] ) {
NSLog(@"%@",[anObject aMethod]);
}
}
Поскольку свойства обычно приводят к синтезированным методам, второй способ также должен работать для них.
Также стоит упомянуть - хотя и не в рамках этого вопроса:
Классы также можно задавать, если они выполняют определенный протокол. И, как Объекты могут определить класс, это также возможно:
[[anObject class] conformsToProtocol:@protocol(MyProtocol)];