2012-04-04 41 views
6

我注意到在斯坦福CS193p課程的計算器演示中,IBOutlet連接被從標籤拖到頭文件。但是,IBAction連接直接在.m文件中創建。我嘗試閱讀文檔並在Google上搜索,但無法找到背後的原因。IOS CS193p - 爲什麼IBAction連接拖到.m文件而不是.h?

我會爭辯說IBAction digitPressed方法也應該在頭文件中聲明(它不應該是接口的一部分嗎?)。我很明顯相當新的目標C(主要在Java中工作),所以我相信我失去了一些基本的東西。

任何人都可以解釋一下嗎?

回答

8

在類的頭文件中聲明事物使它們成爲公共接口的一部分。這包括在視圖控制器上定義的插座和動作。

是否應該公開是一個設計問題。一個好的原則是:只有在必須的時候。隨着ViewControllers的出路和行動,往往不是,他們不必是 - 因此也不應該 - 公開的。

通常會發生的情況是您對公共接口應該包含的內容進行一些猜測,然後(如果您是一個整潔的開發人員)在實現成熟時再次看看並刪除任何不重要的東西。

+3

能夠在.m文件中聲明IBOutlets並將它們鏈接到IB中是相當新的。演示和教程並沒有全部趕上。這絕對是更好的解決方案,並且避免了修改另一個對象的IBOutlets(你永遠不應該這樣做)的非常糟糕的做法。 – 2012-04-04 02:58:42

+0

@danh,你能解釋爲什麼網點和行爲不必公開嗎?如果這些視圖未公開,View如何在控制器中訪問這些視圖? – Rahul 2012-04-09 02:08:52

+1

如果你已經在MVC中受過教育,ViewController可能是一個令人困惑的名字。並非如你所想,這個首字母縮寫詞是兩個同伴的搭檔。最好把它看作是控制視圖的東西。從這個意義上講,讓自己的觀點保密是更有意義的。這不是一個規則,或者當然,只是一種常見的做法。視圖是視圖控制器的一個屬性,您創建的子類通常具有其控制的其他子視圖。這種控制通常是相當絕對的,因爲他們不與其他人分享這種控制。請讓我參考一下google,並將其發佈到此處。 – danh 2012-04-09 02:35:09

相關問題