2011-12-30 40 views
-1

我正在通過當前版本爲支持iOS 4.x的XCode 4.2編寫我的第一個應用程序。爲了支持iOS 4.0,我沒有使用Storyboard功能,並且還使用unsafe_unretained作爲弱引用。我有AppDelegate文件(.h和.m)以及幾個視圖控制器UITabBarController。在我的第一個視圖控制器中,在-viewDidLoad方法中,我初始化了兩個NSDictionaries並且還以1秒的間隔啓動了一個定時器。在選擇器方法中,我必須從0到7之間選取一個隨機數,以在這兩個字典中選擇相應的值。字典僅用於第一個視圖控制器中,而不是任何地方。適用於可能共享的iPhone/iPad應用程序的數據和邏輯的最佳位置

我的第一個問題是

  1. 我在哪裏加載這些兩個字典 - 在AppDelegate中-didFinishLaunchingWithOptions:方法或在第一視圖控制器的-viewDidLoad方法?
  2. 我也想支持iPad。如果是這樣的話,我可以創建一個通用類庫來支持iPhone/iPod/iPad嗎?如果這是推薦的方式,我可以將常用功能移到AppDelegate .m文件嗎?

請指教。

回答

0

您可以將公用數據和業務邏輯移動到UI層和應用程序之外的單獨的一組模型類中。這是MVC模式的主要優點之一 - 通過分離和明確區分,可以很容易地創建單獨的視圖圖層(一個用於手機,另一個用於iPad)。

這意味着所有的數據(字典),您的隨機數和定時器的邏輯將被封裝和共享。這也允許你乾淨地單元測試多數模型和邏輯編程。這也意味着您可以對算法進行重大更改並最大限度地減少代碼流失。

當計時器關閉時,它可以發佈通知,也可以在委託模式下進行回叫。

相關帖子:Delegates vs. events in Cocoa Touch

如果你做一個共享的模型,一個選擇是使用在您訪問像模型中的單例模式:

[MyModel sharedInstance]; 
+1

優秀。你能向我展示一個如何創建模型類的簡單例子。當您指「查看圖層」時,是否指iPhone和iPad的單獨視圖(.xib,.h和.m)? – 2011-12-30 19:10:48

+0

模型類只不過是帶有.h和.m的objective-c類。至於單身人士,搜索objective-c單身人士。 – bryanmac 2011-12-30 19:14:21

+0

也閱讀:http://stackoverflow.com/questions/2411507/singleton-where-to-create-instance – bryanmac 2011-12-30 19:15:48

0

你應該讓你的代碼和數據一起,如果這意味着如果你只訪問視圖控制器中的字典,那麼你應該在視圖控制器的viewDidLoad中初始化它們。

如果可能的話,我建議你不要讓應用程序委託出來,否則你最終會得到一個奇怪的怪物類,它會做太多不應該負責任的事情。如有必要,創建一個或多個管理常用數據的類(例如使用單例模式)。

是否可以/應該爲iPhone和iPad使用通用文件取決於許多因素。主要因素是:用戶界面有多不同?如果他們非常相似,那麼使用兩個類。您還可以爲iPhone和iPad創建具有通用功能和子類的基類,以實現必要的差異。

+0

感謝您的所有答覆。我很快就讀到了這位前任先生髮布的鏈接,但它讓我感到困惑。一個帶有示例字典初始化代碼的快速單例示例以及如何使用它將對新手非常有用。 – 2011-12-30 19:25:58

相關問題