Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c AppDelegate和main.m之间的关系_Objective C_Cocoa_Delegates - Fatal编程技术网

Objective c AppDelegate和main.m之间的关系

Objective c AppDelegate和main.m之间的关系,objective-c,cocoa,delegates,Objective C,Cocoa,Delegates,好的,我对obj-c+可可是完全陌生的,所以这可能是显而易见的,但下面是: 在学习如何在Xcode中使用objective-c时,我已经从命令行应用程序转向cocoa应用程序。有一件事我不太理解,那就是AppDelegate的角色以及它是如何连接到main.m的 看起来你可以把你的整个程序放在appdelegate中,它会运行得很好,你甚至不需要main.m,但反过来说,如果你正在制作一个cocoa应用程序,你至少需要有appdelegate 我已经做了很多php web开发和命令行工具,所以我

好的,我对obj-c+可可是完全陌生的,所以这可能是显而易见的,但下面是:

在学习如何在Xcode中使用objective-c时,我已经从命令行应用程序转向cocoa应用程序。有一件事我不太理解,那就是AppDelegate的角色以及它是如何连接到main.m的

看起来你可以把你的整个程序放在appdelegate中,它会运行得很好,你甚至不需要main.m,但反过来说,如果你正在制作一个cocoa应用程序,你至少需要有appdelegate

我已经做了很多php web开发和命令行工具,所以我想我要找的是程序将首先执行的文件,并打算“控制”其余的文件


有人能帮我理解Cocoa程序中发生了什么,AppDelegate和main.m是如何(或不是)相关的,以及程序的流程应该是什么吗?

main.m
包含
main()
函数,它是程序的入口点,首先运行它。然后,它调用
UIApplicationMain()
,执行操作系统特定的应用程序设置工作,并加载主界面生成器
.xib
文件,其中包含应用程序代理实例


也就是说,如果没有
main.m
,您的应用程序委托甚至无法加载。

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

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

这在一开始可能会让人困惑,因为您试图弄清楚如何欺骗框架,使其按照预期的时间和顺序调用代码,但从长远来看,它实际上使事情变得更容易,因为您可以相信框架会为您处理很多事情


在Cocoa应用程序中,应用程序的很多逻辑实际上都在视图控制器中,而不是在应用程序委托中。应用程序委托通常处理启动和关闭责任,但其他对象在启动和关闭之间完成大部分工作。因此,不要试图将所有内容都压缩到app委托中。

重要的一点是,
main.m
基本上是样板代码,它只是将所有内容设置为运行
UIApplicationMain()
。很少需要在
main()
中添加或更改任何内容。应用程序委托是“你的代码”开始的地方。好的,这个答案和注释很有意义,main()只是让程序启动,它做的第一件事就是让UI运行,这意味着应用程序委托正在运行。@Andrew是的,没错。还应注意,
UIApplicationMain()
可以根据需要直接创建应用程序委托,而不是从nib文件加载(将类名作为参数之一传递)。如果我的答案对你有用,请点击计票下方的复选标记,将其标记为正确。谢谢:)+1。所有伟大的信息,虽然没有直接解决这个问题。参见jtbandes对main vs.app delegate部分的回答。它没有解决关于main.m vs.app delegate的问题,但我认为它确实解决了“程序的流程应该是什么”部分,这是我认为提问者真正想弄明白的。这非常有帮助!我一直很难理解的一点是,为了让框架能够在我想要的时候使用特定的方法,代码中到底需要发生什么。控制器文件(例如controller.m和controller.h)与UI之间的确切连接是什么。我应该将输入挂接到AppDelegate,然后让AppDelegate将数据中继到控制器或从UI直接连接到控制器吗?我只能说“这取决于”。如果您有一些全局应用程序范围的数据需要多个控制器访问,那么应用程序委托可能就是放置这些数据的地方。但仅由控制器及其自身创建的任何子客户机使用的数据应驻留在该控制器中。本文可能有助于: