2013-07-25 30 views
3

鑑於iOS SDK 6.1在Xcode 4.6.3中使用,是否在頭文件中聲明方法簽名IBAction有什麼不同?我應該將IBActions放在頭文件中嗎?

沒有在頭文件中放入方法聲明,該應用程序仍然能夠編譯和運行沒有問題。但是,該方法在故事板中不可見。

有沒有隱藏的問題沒有在頭文件中聲明該方法?是否有內存消耗差異?

+1

這是支持從我可以告訴封裝(oop)。您可以從公共界面隱藏該方法並將其從代碼鏈接到插座。通過這樣做,您可以將實現從符合oop的接口中隱藏起來。但是,如果你在@interface classname()類中聲明瞭方法,你就可以在界面構建器中看到該方法。 – Radu

回答

1

IBAction方法的整個點將是Interface Builder中的public連接點(使用故事板或不使用故事板)。

IBAction本身是#define d爲void。它的唯一目的(IBOutlet也是如此)允許Xcode掃描您的代碼並找到控制器需要通過IB連接視圖的這些點。如果以編程方式將控件連接到該方法,則不需要聲明的IBAction部分。

沒有性能差異,但在語義上,將IBAction放在您的實現文件中並沒有什麼意義。擁有IBAction表示控制器正在通過該方法與外部對象進行通信,而這正是聲明的標題/公開@interface

+5

我不知道我是否同意這一點。爲什麼需要公開?我一直使用'IBAction'方法來執行內部邏輯。關於封裝的原理,如果我真的需要它,我不想通過公共接口公開它嗎?看起來像蘋果可能已經意識到這一點,這就是爲什麼他們增加了支持拖動行動直接到實施文件的幾個Xcode版本回來。請糾正我錯誤的地方,但我很想爲此採取最佳做法。 –

+0

我不確定我能否比我的回答更清楚。連接到對象的'IBAction'的按鈕不在內部。它在你的對象之外 - 它是視圖的一部分;它與周圍的景觀有關係。 IBAction和IBOutlet是定義的耦合點。 –

+3

我剛剛讀過IBAction和IBOutlet的開發人員文檔,找不到任何要求或提及它是公開的。你從哪裏獲得了「IBAction」作爲「公共連接點」的定義?不能私人連接點也足夠了嗎?例如,假設我有一個loginButtonAction掛鉤的登錄屏幕。我不想將這個功能暴露給我的登錄視圖控制器外部的任何類,那麼爲什麼我會把IBAction放在header/public'@ interface'中? –

1

如果你想在storyboard/interfaz構建器中連接它,或者想讓其他類被調用它,你只需要在.h文件中聲明它。

如果你只是想讓它成爲私有的並且只在你的類中使用它,那麼就不需要在頭文件中聲明它。

沒有內存或性能差異。

0

即使您計劃將其掛接到界面構建器,它仍然不在頭文件中。我個人只是將它們直接放入實現文件中。

相關問題