2011-07-18 34 views
2

我正在寫一個Cocoa應用程序,我一直向其中添加按鈕,視圖和圖層。然而,由於所有這些增加,我的appdelegate類變得相當大,難以閱讀。因此,我決定將一些與UI相關的調用從appdelegate移到其他類。但是,UI調用似乎只能在主線程中完成,並且(如果我錯了,請糾正我)來自appdelegate。我將實驗轉移到其他課程中也讓我遇到了困難,確保在主線程中正確執行所有操作。所以,我的所有UI調用仍然是從appdelegate類調用的。設計可可應用程序

我的問題是如何改進我的應用程序的設計?我能否以避免線程問題的方式從appdelegate之外的其他類調用UI?我可以將appdelegate類拆分爲嚴重文件,一個用於按鈕,一個用於視圖等,或者是否有更好的方法來設計應用程序?任何有關示例或教程/書籍鏈接的建議都非常感謝。

謝謝大家。歡呼,Trond

+0

既然你用'Cocoa'標記了這個,我假設你在Mac上工作,對吧? –

+0

是的。我應該更清楚地表明我在Mac上工作。 –

+4

AppKit不關心你從應用程序對象的委託中做了什麼或不做什麼。唯一必須在給定對象委託中的東西是其委託協議的方法 - 即使這樣,通常只有其中一些(通知方法可以在任何地方實現)。查看繪圖代碼應該在視圖中(絕不會從另一個對象繪製視圖)。除此之外,沒有任何特定類別的代碼應該在任何特定類別中的要求。 –

回答

4

可可以很大程度上基於Model-View-Controller體系結構。關於如何在Cocoa Design Patterns參考文獻中使用可可中的這種模式,有一些非常棒的閱讀。基本上,您希望儘可能在應用程序委託中擁有儘可能少的UI代碼。如果可能的話,應用程序代理應負責只有用於應用程序級別的控制。將UI控制器代碼放在單獨的控制器類中會好得多。 MVC架構引領你走向正確的道路; Cocoa提供了視圖,您可以編寫模型類 - 應用程序的「業務」邏輯 - 然後使用視圖控制器來協調這兩者。

3

UI調用需要從主線程完成,該部分是正確的。但是,您不需要通過應用程序代理來完成它們。只要它在主線程上完成,你可以隨心所欲地執行它們。

現在,一些UI的東西可以可以在其他線程上完成,但AFAIK UIKit的設計不是線程安全的,因此可能會發生奇怪的事情和崩潰。

將事情分解爲其他專業類別沒有任何問題。我一直這樣做。您可能想要引入一個存儲和管理狀態的對象,並可能訪問您的專用「控制器」。

看看UIViewController以及它爲您提供了什麼,如果您可以將您的應用分成「頁面」,這可能是一條可行的路。

+0

問題是關於可可,而不是可可觸摸。 UIKit在這裏不相關。儘管如此,直到最後一段,你所說的一切都是關於AppKit的。 –

+0

@彼得霍西:你說得對,我的大腦以某種方式偷偷地「觸摸」。感謝您指出了這一點。 – DarkDust

+0

我的非觸摸可可有點生疏,但用「NSWindowController」和「windows」替換「UIViewController」和「頁面」可能會使最後一段適用。 – nevyn