Cocoa:int主要功能

时间:2010-01-21 16:59:25

标签: objective-c cocoa nsapplication

我很好奇,int main函数在Cocoa程序中扮演什么角色?实际上,我一直在查看的所有示例代码在main.m中只有以下代码:

#import <Cocoa/Cocoa.h>


int main(int argc, char *argv[])
{

    return NSApplicationMain(argc,  (const char **) argv);
}

这究竟是做什么的,程序实际上从哪里开始逐步执​​行命令?看来我的观念需要重新调整。

5 个答案:

答案 0 :(得分:10)

由于Cocoa项目像其他任何项目一样启动,因此操作系统的入口点是主要的。但是,构建Cocoa体系结构是为了从NSApplicationMain实际开始处理程序,NSApplicationMain负责从应用程序加载初始窗口并启动用于处理GUI事件的Events循环。

Apple在Cocoa Fundamentals Guide : The Core Application Architecture on Mac OS X

下对此进行了深入的讨论

答案 1 :(得分:5)

如果您想了解控件如何从“启动此”传递到main()函数,execve手册页会详细说明。您还需要阅读dyldmain()是Unix标准的一部分。您可以有效运行的每个程序都有一个main()

正如其他人所提到的,NSApplicationMain将控制传递给Cocoa。 documentation对于它的作用非常具体。

一个有趣的说明,NSApplicationMain实际上并不是每次都回归。也就是说,如果您要将NSApplicationMain的调用与main函数中的返回分开并将代码置于其间,则该代码将永远不会被执行。

答案 2 :(得分:4)

main()是程序的入口点。

运行程序时,第一个被调用的函数。退出该功能后,程序将结束。

另请注意,这不是来自Objective-C。这很简单C.

看一看 Wikipedia's page on it

答案 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函数。