對於我的大部分應用程序,我已經將所有的邏輯放在類中,每個ViewController也會獲得類的引用,或者創建/釋放對象本身。將大多數邏輯和模型放在appDelegate中可以嗎?
我剛剛開始閱讀關於IOS的書,作者似乎喜歡將app邏輯放在appDelegate中,而viewcontrollers只是將操作轉發給執行實際工作的appDelegate方法。
作者是這樣做的,因爲他們是簡單的例子,或者這是我應該學習的東西,並開始在我的應用程序中做?
對於我的大部分應用程序,我已經將所有的邏輯放在類中,每個ViewController也會獲得類的引用,或者創建/釋放對象本身。將大多數邏輯和模型放在appDelegate中可以嗎?
我剛剛開始閱讀關於IOS的書,作者似乎喜歡將app邏輯放在appDelegate中,而viewcontrollers只是將操作轉發給執行實際工作的appDelegate方法。
作者是這樣做的,因爲他們是簡單的例子,或者這是我應該學習的東西,並開始在我的應用程序中做?
首先,看看What describes the Application Delegate best? How does it fit into the whole concept?
的應用程序委託是應用程序的委託。這不是放置你不知道放哪裏的所有東西的地方。它不是全局的存儲位置。它是UIApplication
對象的代表。因此,它是放置與啓動應用程序,終止,切換到背景等相關代碼的正確位置。與應用程序如何適應操作系統有關的事情。
應用程序委託是一個控制器,所以它不應該保存數據。數據進入模型。應用程序委託可以在啓動時創建模型並將其交給其他控制器,但它不是模型的API。模型通常是單身人士,而不是由應用程序委託人創建。兩種方法都有優勢。
大多數示例代碼將模型代碼放入應用程序委託中,因爲對於簡單示例,它需要的代碼少一點。但在真正的程序中,它使應用程序委託過於複雜,並且顯着損害了代碼重用。您的應用程序委託通常應該很小,並且其中的大部分方法應該是<UIApplicationDelegate>
的一部分。
我想在我的核心數據依賴應用程序中到處使用managedObjectContext。除了導入Appdelegate以外,我無法找到任何解決方案來訪問它。有另一種出路嗎? – Nil 2017-04-02 11:32:44
將'managedObjectContext'移動到應用程序委託以外的地方。它可以是它自己的單例,也可以注入需要它的對象中。我親自將它注入需要它的模型對象,並讓視圖控制器通過一個「ViewControllerServices」單例獲取它。但這不是應用程序的代表。 – 2017-04-03 21:31:39
我有一個管理appstate(用戶信息,設置,其他用戶首選項)的單例。我在那裏創建了一個managedObjectContext的強大屬性,並在'applicationDidFinishLaunching'代碼中初始化了這個屬性。這是最佳的流程嗎?我可以從這裏通過應用程序使用managedObjectContext! – Nil 2017-04-04 07:25:41
我會說這是因爲這些例子可能很簡單。對於任何相當複雜的真實世界的應用程序,appdelegate類很快就會變得笨拙。
技術上你可以做到。在編程實踐方面,不要。一旦你在appDelegate中放了很多東西,它就會變得非常混亂。我的建議會讓它一無所獲。
除了全局變量,你不需要在appDelegate中放置任何東西。如果你確實需要它,我的建議可能會使用其他類似單身模式的東西。一般來說,全局變量不是很好的做法。
希望這會有所幫助。
我喜歡LavaSlider的答案在這裏http://stackoverflow.com/questions/8421138/importing-appdelegate – Rhubarb 2012-11-02 13:28:16