有人可以告诉我这是否是在目标c中进行类型转换的正确方法。
我有一个对象" myObject"它可能是" DataViewController"的一个实例。 如果是这样,我应该调用" updateView"方法
if (myObject respondsToSelector:@selector(updateView:)])
{
[(DataViewController *)myObject updateView:data];
}
答案 0 :(得分:0)
在这种情况下你不需要演员:既然你已经开始了选择器路径,你也可以调用performSelector:withObject:
来保持一致性:
if (myObject respondsToSelector:@selector(updateView:)]) {
[myObject performSelector:@selector(updateView:) withObject:data];
}
这是一种更通用的方法,因为它允许您在其他类型的对象上运行updateView
,不一定是DataViewController
,只要它们具有适当的方法。
如果您想使用基于类型的解决方案,可以使用isKindOfClass:
方法,如下所示:
if (myObject isKindOfClass:[DataViewController class]]) {
DataViewController *ctrl = (DataViewController)myObject;
[ctrl updateView:data];
}