在Objective C中输入Casting

时间:2014-06-15 09:24:08

标签: objective-c casting

有人可以告诉我这是否是在目标c中进行类型转换的正确方法。

我有一个对象" myObject"它可能是" DataViewController"的一个实例。 如果是这样,我应该调用" updateView"方法

if (myObject respondsToSelector:@selector(updateView:)])
{
    [(DataViewController *)myObject updateView:data];
}

1 个答案:

答案 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];
}