2011-07-15 26 views

回答

10

沒有正確答案,這一個。你會在這方面得到很多意見。我看不出有什麼問題與使用AppDelegate的,我做我的所有的應用程序:

  • 委託是iPhone應用程序實際上是強制性的,
  • 它的存在對於應用程序的生命週期;
  • 並且可以從程序中的任何地方訪問它(儘管不要濫用它!)。

儘管如此,我們必須保持警惕,以便不一定必須在那裏的代碼不在那裏。你不希望你的AppDelegate變得龐大而不可維護。

的問題已經回答過了StackOverflow上:

Application Design and AppDelegate

對這些問題的答案可以幫助你也。

+0

你將如何直接從其他類訪問AppDelegate?例如,訪問它中的一個屬性 – darksky

+1

要獲得對委託的類型訪問,請調用YourAppDelegate * delegate =(YourAppDelegate *)[UIApplication sharedApplication] .delegate; – ageektrapped

+0

因此,可以在各種viewcontrollers中導入Appdelegate嗎?如果不是的話,請指點我解釋它的地方 – Nil

4

AppDelegate應該處理啓動狀態,背景條目等狀態下的應用程序行爲。你不應該把它變得更復雜,因爲它不是一個好的設計模式。但是你可以隨時在你的AppDelegate中保存對你的dataStore類的引用,並通過AppDelegate訪問它。通過這種方式,您可以從AppDelegate中抽象存儲數據,但仍然可以輕鬆實現。

0

那麼,在數據抽象方面,它可能是在不安全的一面位,但我相信它是在內存中方便的地方了。你應該做什麼,可能是用訪問器方法封裝變量,以便你有一個地方做併發相關的操作(如果有的話)

但是,如果你的意思是從一個UI類傳遞對象到另一個,那麼也許你應該使用別的東西,像其它設置一個成員變量,或者使用數據存儲等

0

對於相關的整個應用程序,我用的是AppDelegate中的控制器代碼小塊。如果有一種明智的方法將代碼拆分爲單獨的控制器對象,那麼這將是更可取的,因爲我看到應用程序代表已經膨脹到無法管理的大小。

它也可以是一個很好的方式,以「singletonize」控制器對象,如果沒有你以後要對他們有一個以上的燃燒你的橋樑。

我居然把一個類的方法在AppDelegate中訪問它,所以我可以做這樣的事情:

[[AppDelegate get].dataStore getRecordNumber:x] // or 
[[AppDelegate get].server refreshData] 

但我敢肯定,還有那些認爲這是在團隊環境不好的設計。

3

我得到了很多廢話的這一點,但對於具有全球意義短小的數據,我沒有任何問題都保持在App代表。

更大的數據塊需要一個商店的出的內存(核心數據,文件系統,SQLlite,或者你有什麼)。

我的第一個應用程序有周圍的數據晃盪(NSDictionaries中的文本,各種大小的UIImages等)的TON。我構建了一個數據管理單例,將它全部保存在一個地方,並處理服務器對更新的請求。它的工作沒關係。如果我現在知道我現在知道的,那麼我可能會想出一個核心數據同步策略。

+0

這真的取決於 - 我正在編寫一個遊戲應用程序,我需要一個單身人員班來管理分數,玩家等......在這種情況下,Singleton比Core Data的效果更好。 我正在寫另一個應用程序,它實際存儲數據並在線下載內容。在這種情況下,我正在使用核心數據。 – darksky

+1

是的,那也沒關係。我也因爲不堅定的反單身而得到獎勵。我認爲這是一個很好的工具,像很多好工具一樣,可能會被濫用。 –

相關問題