2009-08-21 32 views
1

如果我有一個方法傳遞一個類型爲void *的參數(UIView動畫沒有停止方法,必須是一個void指針),或者類型id,而且我知道這個參數是一個UIBarButton項,而我需要禁用它,[barbuttonitem setEnabled:NO] ;,我應該將參數強制轉換爲一個UIControl參數,儘可能使用setEnabled(沒有警告),或者我應該一直向下到UIBarButtonItem?爲什麼?iPhone dev - 我應該投多少?

謝謝!

回答

1

UIBarItem不是派生自UIControl,所以鑄造到UIControl真的不是正確的事情。它的工作原理是這兩個類碰巧有setEnabled:方法。

轉換隻是另一種形式的文檔;它們不會影響運行時發生的情況。如果你期待UIBarItem那麼就這樣投。

+0

哦,我認爲這是一個UIControl。 – mk12 2009-08-23 18:11:00

2

我會說它投到一個UIControl,以防萬一實施在某些時候改變。我總是會選擇最適合的界面(而不是實現),UIControl可能是最佳選擇。

+0

這是些微不正確的建議,iftrue。如果您期待UIBarButtonItem實例,最合適的**接口**是UIBarButtonItem,而不是UIControl。 如果你擔心實現的改變(你不應該這樣),你特別不能相信它會有相同的超類。 – retainCount 2009-08-21 15:35:59

+0

其他人有意見嗎? – mk12 2009-08-22 00:56:49

+0

如果您使用UIControl編碼,那麼您允許您從UIBarButtonItem更改爲其他內容(例如UIButton),並且仍然可以使用所有代碼。我不會擔心/期待超類改變;在任何情況下,所有控件都是UIControl的子類型,幾乎是事實上的標準;那永遠不會改變。 – AlBlue 2009-08-23 08:31:44

0

轉換隻告訴你期望某種類型的變量,編譯器:它確實沒有事業在傳遞的變量進行任何更改,您可以將它轉換無需憂慮的UIBarButtonItem。

0

如果我正確理解Objective-C,你可以直接在對象上調用setEnabled;你只是不能保證電話會通過。但是如果你知道返回的對象是一個UIBarItem,那麼你可以調用它。