AppDelegate和main.m之间的关系

And*_*rew 8 cocoa delegates objective-c

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

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

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

我已经做了很多php web开发和命令行工具,所以我想我正在寻找的是程序首先执行的文件,旨在"控制"其余部分.

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

jtb*_*des 11

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

也就是说,没有main.m您的应用委托也不会被加载.

  • 重要的一点是`main.m`基本上是样板代码,它只是将所有内容设置为运行`UIApplicationMain()`.很少需要在`main()`中添加或更改任何内容.所以app委托是"你的代码"开始的地方. (4认同)

Kri*_*son 8

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

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

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

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

  • +1.所有好的信息,虽然没有直接解决这个问题.请参阅jtbandes对主要vs app委托部分的回答. (2认同)