2009-04-22 68 views
3

我正在開發一個iPhone應用程序,用於我一直在研究的一些甜蜜的本科生研究。可悲的是,我的學校沒有提供軟件工程/設計課程,所以當涉及面向對象設計的最佳實踐問題時,我會進行大量的閱讀。應用程序設計和AppDelegate

我的困境:

我的應用程序加載的圖(V1),其中,當用戶的按鈕點擊時,V1的控制器類執行操作方法。此操作方法應該使用對象填充數組。之後,用戶將再次執行該操作,或者單擊不同的選項卡以加載另一個視圖。應用程序中的其他視圖將使用v1填充的數組。

那麼,這個共享數組應該在哪裏聲明呢?現在,它在AppDelegate類中,從我測試沒有GUI的功能開始。我應該抓住AppDelegate單例並在v1ViewController中添加項目嗎?它應該被聲明爲靜態的嗎?

感謝您的幫助!

^布法羅

編輯:

後續問題:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 
:當一個單身,這是更好的方式來與它對話互動

我想我想知道的是,你每次做的sharedInstance方法調用或做y ou定義一個指向sharedInstance的指針,然後引用指針?

回答

4

使用應用程序委託存儲在視圖和視圖控制器之間共享的數據是合理且恰當的。

在我的應用程序中,我將應用程序委託視爲MVC的控制器部分,UIViews和視圖控制器都是「視圖」的一部分。我更喜歡使用稱爲Passive View的MVC變體,該模型使得我的應用程序的模型和視圖部分與僅連接它們的控制器嚴格隔離。

我假設你存儲的對象數組是你的應用程序的模型,因此將它們存儲在你的應用程序委託中是有意義的。正如Daniel D所說,沒有必要把它變成靜態的。

應用程序代表真的是你的程序的核心。在-applicationDidFinishLaunching:方法中創建並初始化模型和視圖,並將模型數據和視圖狀態保存在-applicationWillTerminate:中。當視圖控制器接收到更改模型的事件時,可以調用應用程序委託中的方法來進行這些更改。

+0

後續問題: 當一個單身,這是更好的方式來與它對話互動: [MyAwesomeSingleton sharedInstance] gimmeSomePizza]。 或 MySingleton * s = [MySingleton sharedInstance]; [s gimmeSomePizza]; 我想我想知道的是,你每次做的sharedInstance方法調用,或者你定義一個指向sharedInstance的指針,然後引用指針? – Buffalo 2009-04-24 20:46:52

0

您可以將它存儲在應用程序代理的ivar中。無論如何,您無需將其設置爲靜態,因爲應用程序委託無論如何都是單身人士(永遠不會超過1個實例)。

如果應用程序委託變得有點複雜,則可以將數據存儲分解爲單獨的模型對象或可能使用核心數據。