我很好奇,int main函数在Cocoa程序中扮演什么角色?实际上,我一直在查看的所有示例代码在main.m中只有以下代码:
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}
这究竟是做什么的,程序实际上从哪里开始逐步执行命令?看来我的观念需要重新调整。
答案 0 :(得分:10)
由于Cocoa项目像其他任何项目一样启动,因此操作系统的入口点是主要的。但是,构建Cocoa体系结构是为了从NSApplicationMain实际开始处理程序,NSApplicationMain负责从应用程序加载初始窗口并启动用于处理GUI事件的Events循环。
Apple在Cocoa Fundamentals Guide : The Core Application Architecture on Mac OS X
下对此进行了深入的讨论答案 1 :(得分:5)
如果您想了解控件如何从“启动此”传递到main()
函数,execve手册页会详细说明。您还需要阅读dyld。 main()
是Unix标准的一部分。您可以有效运行的每个程序都有一个main()
。
正如其他人所提到的,NSApplicationMain
将控制传递给Cocoa。 documentation对于它的作用非常具体。
一个有趣的说明,NSApplicationMain
实际上并不是每次都回归。也就是说,如果您要将NSApplicationMain
的调用与main
函数中的返回分开并将代码置于其间,则该代码将永远不会被执行。
答案 2 :(得分:4)
main()是程序的入口点。
运行程序时,第一个被调用的函数。退出该功能后,程序将结束。
另请注意,这不是来自Objective-C。这很简单C.
答案 3 :(得分:0)
当进程完成时,进程将从main返回的值返回给操作系统。
Shell存储上一个进程返回的值,您可以使用$?
:
> ls
a b c
> echo $?
0
> ls x
x: No such file or directory
> echo $?
1
ls是一个像其他任何东西一样的应用程序。
您可以使用返回值将多个进程链接在一起,使用shell脚本或其他任何可以执行进程并检查返回值的进程。
答案 4 :(得分:0)
我想知道代码的开始位置 执行(就像为什么NSView 子类在没有我的情况下执行和绘制 明确地称它为?)如果我不是 我应该把我的主循环粘在int中 main()它去哪了?
在xcode项目中,你有一个main.m文件,其中包含'int main'函数。您实际上不会找到明确调用NSView绘图的代码,此代码隐藏在iPhone或Mac OS X框架的深处。只要知道在'int main'中隐藏了一个事件循环,它会检查更改,以便知道何时更新视图。您不需要知道此事件循环的位置,它不是有用的信息,因为您可以覆盖方法或创建和分配可以执行此操作的委托。
为了得到更好的答案,你需要解释你想要放在'int main'函数中的'主循环'的含义。
这对我来说很奇怪 没什么经验的C ++。它看起来 主要功能会不自然 太空了。
您可以将十亿行代码封装到一个函数中并将其放入“int main”中。不要被只有几行的主要人员欺骗,这是有目的的。良好的编程教会我们将代码保存在特定的容器中,以便组织良好。 Apple选择在main.m文件中的这一行代码中创建其iPhone应用程序的“真正”发布点:
int retVal = UIApplicationMain(argc, argv, nil, @"SillyAppDelegate");
从这一段代码开始,app的委托就会启动,并且在完成之前不会将控制权返回给main函数。