關係

2010-08-12 108 views
7

好吧,我是完全陌生的OBJ-C +可可,所以這可能是顯而易見的,但這裏有雲:關係

我已經命令行移動應用向Cocoa程序學習如何在Xcode中使用objective-c。有一件事我不明白的是AppDelegate的角色以及它如何連接到main.m

看起來你可以把你的整個程序放在appdelegate中,它可以正常運行,而且你甚至不會需要main.m,但不是相反,如果你正在製作一個可可應用程序,你必須至少有appdelegate。

我已經完成了大量的php web開發和命令行工具,所以我猜想我正在尋找的是程序將首先執行的文件,並且旨在「控制」其餘的文件。

誰能幫我明白這是怎麼回事在可可程序,如何的AppDelegate和main.m文件被(或沒有)相關的,以及什麼程序的流程應該是什麼?

回答

8

許多面向對象的系統的關鍵特徵(例如可可)是"inversion of control",這基本上意味着所述框架所運行的一切,你寫任何代碼是在其控制下。

因此,與PHP,你不寫,執行在啓動時的代碼。你所做的是定義應用程序委託,控制器,視圖和其他對象的方法,並讓框架在需要時調用這些方法。在整個項目中你永遠不會看到整體的「控制流程」;你只會看到它作爲控制流入你的程序段。

當你試圖弄清楚如何欺騙框架以便按照你期望的順序調用你的代碼時,這可能會引起混淆,但從長遠來看,它實際上使事情變得更容易,你可以相信這個框架可以爲你處理很多事情。

在可可應用程序,很多應用程序的邏輯的實際上將在視圖控制器,而不是在應用程序的委託。應用程序委託通常處理啓動和關閉的職責,但其他對象執行啓動和關閉之間的大部分工作。所以不要試圖把所有東西都擠進應用程序代理。

+2

+1。所有很棒的信息,雖然不直接解決這個問題。請參閱jtbandes對主要vs應用程序代表部分的回答。 – 2010-08-12 19:47:38

+1

它沒有解決關於main.m與應用程序委託,但我認爲它確實解決了「程序的流程應該是什麼」部分,這是我認爲提問者真正想要弄清的部分。 – 2010-08-12 20:03:01

+0

這有助於很多! 我一直很難掌握的部分是在框架代碼中需要發生什麼,以便能夠在我需要時使用特定的方法。 控制器文件(controller.m和controller.h - 例如)和UI之間的確切連接是什麼?我是否應該將輸入連接到AppDelegate,然後讓AppDelegate將數據傳遞給控制器​​,或者直接從UI連接到控制器? – Andrew 2010-08-13 13:36:49

11

main.m包含main()函數,它是程序的入口點,它首先運行。然後它調用UIApplicationMain(),它執行特定於操作系統的應用程序安裝程序,並加載包含您的應用程序委託實例的主界面生成器.xib文件。

也就是說,沒有main.m您的應用程序代理甚至沒有得到加載。

+4

重要的一點是,'main.m'基本上是樣板代碼,只是完成所有設置來運行'UIApplicationMain()'。很少有需要在'main()'中添加或改變任何東西。所以應用程序委託是「你的代碼」開始的地方。 – 2010-08-12 01:17:37

+0

好的,這個答案和評論是有意義的,main()只是讓程序開始,它所做的第一件事就是讓UI進入,這意味着應用程序委託正在運行。 – Andrew 2010-08-13 13:25:47

+0

@安德魯是的,這是正確的。還應該注意,'UIApplicationMain()'可以直接創建你的應用程序委託,而不是從一個nib文件中加載它(你將類名稱作爲參數之一)。如果我的答案適合您,請點擊選項下方的複選標記,將其標記爲正確。謝謝:) – jtbandes 2010-08-13 14:33:37