AppDelegate和main.m之间的关系

时间:2010-08-12 01:12:07

标签: objective-c cocoa delegates

好吧,我对obj-c + cocoa完全不熟悉,所以这可能是显而易见的,但这里有:

我一直在从命令行应用程序转移到可可应用程序,学习如何在Xcode中使用objective-c。我不太了解的一件事是AppDelegate的作用以及它如何连接到main.m

好像你可以将你的整个程序放在appdelegate中它运行正常,你甚至不需要main.m,但不是相反,如果你正在制作一个可可应用程序你必须至少有appdelegate。

我已经完成了很多php web开发和命令行工具,所以我想我正在寻找的是程序首先执行的文件,用于“控制”其余部分。< / p>

任何人都可以帮助我理解Cocoa程序中发生了什么,AppDelegate和main.m是如何相关的,以及程序的流程应该是什么?

2 个答案:

答案 0 :(得分:11)

main.m包含main()函数,它是程序的入口点,它首先运行。然后它调用UIApplicationMain(),它执行特定于操作系统的应用程序设置,并加载包含您的应用程序委托实例的主Interface Builder .xib文件。

也就是说,如果没有main.m,您的app委托就不会被加载。

答案 1 :(得分:8)

许多面向对象系统(如Cocoa)的一个关键特性是"inversion of control",这基本上意味着框架正在运行所有内容,并且您编写的任何代码都在其控制之下。

因此,与PHP不同,您不会编写在启动时执行的代码。您所做的是为应用程序委托,控制器,视图和其他对象定义方法,并让框架在需要时调用这些方法。在整个计划中,你永远不会看到整体的“控制流”;你只会看到它作为控制流入你的程序部分。

一开始可能会让人感到困惑,因为你试图弄清楚如何欺骗框架按照你期望的顺序调用你的代码,但从长远来看它实际上会让事情变得更容易,因为你可以信任为你处理很多事情的框架。

在Cocoa应用程序中,应用程序的许多逻辑实际上都在视图控制器中,而不是在应用程序委托中。 app委托通常处理启动和关闭职责,但其他对象在启动和关闭之间完成大部分工作。所以不要试图将所有东西都挤进app委托。