2013-02-20 44 views

回答

1

正如斯蒂芬所说,这不是真的需要。

但这是一个风格和良好的商业惯例quesiton。

顺便说一句,当你忽略它,你会得到一个警告,而不是一个错误。 只是为了摆脱警告你可以简单地做:

someObject = (id) anotherObject; 

将与任何类的任何对象引用。你会发现几乎没有任何演员能够完成。 可以八方通分配给超不投:

objectOfAClass = objectOfSubclassOfA; 

底线是,它可以帮助你通过迫使你想想你实际上是在做什么,有一个非常短暂的瞬间避免错误。

+0

迄今为止所有出色的答案,但我选择这一个,因为有关编译器警告的细节。只是重申一下:分配给一个超类(不投射)会产生** no **警告;分配给一个子类(没有投射)**会产生一个警告。例如'UILabel *标签; UIView * view = label;'(no warning); 'UIView *视图; UILabel * label = view;'(警告)。 – bfalling 2013-02-20 17:16:57

4

它会告诉你知道你在做什么,编译器:“我知道sender技术上不是UIButon*,但我承诺,它总是会在运行时。”

2

在Objective-C,通常写动作的方法等

- (void)didAction:(id)sender 

此方法可以通过任何对象(例如。的UIButton,UIControl等)被调用,并且组预期发送者的自我。

永远的对象是一个id。所以在这个方法中你有一个id类型的变量。如果你确定它是一个按钮,那么你可以投到UIButton。

另一种方式是,如果你是确保该方法将只通过一个UIButton实例调用,然后你可以改变你的操作方法对

- (void)didAction:(UIButton *)senderButton 

如果你这样做的话,你不需要投。

请注意,对于那种你负责的铸件,没有任何问题。如果您不确定您是否可以随时查看该物品的类别,请使用

- (BOOL)isKindOfClass:(Class)aClass 

方法。

相关问题