如何在Objective C中的对象数组中获取对象的属性?

Tom*_*kie 3 cocoa-touch objective-c nslog ios

我有一个自定义对象数组,但我不能NSLog该数组中单个对象的属性,因为您可以将任何对象存储在数组中.我该怎么做呢?

Vik*_*ica 6

Objective-C 通过运行时系统提供了几种内省技术.

您可以询问某个对象,如果它来自某种类型,或者对某个消息的响应.

for (id anObject in array ){
    if([anObject isKindOfClass:[MyClass class]]){
        MyOtherClass *obj = anObject.myProperty ;
        NSLog(@"%@", obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

for (id anObject in array ){
    if( [anObject respondsToSelector:@selector(aMethod)] ) {
        NSLog(@"%@",[anObject aMethod]);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于属性通常会产生合成方法,因此第二种方法也适用于它们.

还要提一下 - 虽然不在这个问题的范围内:

如果他们满足某个协议,也可以询问类.而对象可以告诉那里的课程,这也是可能的:

[[anObject class] conformsToProtocol:@protocol(MyProtocol)];
Run Code Online (Sandbox Code Playgroud)