2013-02-20 53 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 

方法。

相關問題