在Objective C中,你能检查一个对象是否有特定的属性或消息吗?

我可以做这样的事情:

if (viewController.mapView) [viewController.mapView someMethod]; 

但是,如果mapView不是一个类variables,则会崩溃。 如何检查mapView是否存在?

对于普通的select器,你可以使用respondsToSelector: 我不确定这是否适用于新样式的财产访问(因为它看起来你在这个例子中使用)。 为了testing一个类是否响应给定的select器,使用instancesRespondToSelector:

另外,正如Jason在这里指出的那样,您还可以使用NSSelectorFromString在运行时dynamic检查。 例如

 if ([self respondsToSelector:NSSelectorFromString(elementName)]) { [self setValue:elementInnerText forKey:elementName]; } 

哎呀,发现它:

 if ([vc respondsToSelector:@selector(mapView)]) { [[vc mapView] viewWillAppear:YES]; } 

这里比你要求的要多,但是我发现对于一般处理NSObject属性有帮助:

http://www.whynotsometime.com/Why_Not_Sometime/Category_Enhancing_NSObject.html