如何在Xcode中找出首先运行的文件

时间:2010-09-17 02:01:53

标签: objective-c cocoa cocoa-touch

在一个包含大量.h和.m文件的Xxode项目中,如何确定首先执行哪个文件?

3 个答案:

答案 0 :(得分:9)

包含int main(int argc, char * argv[]);的文件将首先运行,因为main()函数是第一个运行的函数。在几乎每个Xcode模板项目中,该文件都被称为“main.m”。

修改

通常,Cocoa Touch应用程序的main()功能是:

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

(将NSApplicationMain()替换为UIApplicationMain()并删除自动释放池,如果您正在编写Mac应用程序)

编辑#2

  

我只对从classes文件夹

首先运行的文件感兴趣

简单的答案是“应用程序委托”,然后是其他所有内容。

技术答案是MainMenu.xib(Mac)或MainWindow.xib(iOS)文件中的所有对象都将首先被实例化。通常,该文件中的对象将按照它们出现的顺序进行实例化,但我不认为这是保证的。

因此,如果你在MainWindow.xib文件中有3个自定义顶级对象,那么它们将同时被实例化(在合理范围内)。首先他们的initWithCoder:方法将被执行,然后一段时间后他们的awakeFromNib方法将被执行(这通常是该对象最安全的“起点”)。

应用程序委托启动方法也会在某处发生(我相信在initWithCoder:awakeFromNib之间)。

答案 1 :(得分:2)

Cocoa和Cocoa-Touch应用完全由事件驱动。通过阅读源代码文件,可以理解方法执行的顺序。

  • 正如Dave所解释的那样,该程序的输入位于main中的main.m功能。它会立即拨打UI/NSApplicationMain
  • NS/UIApplicationMain是Cocoa(-Touch)提供的功能。它监视用户交互,并相应地触发事件。
    • 例如,当用户单击某个按钮时,系统会自动调用您提供的xib文件中指定的操作方法
    • 另一个例子是您提供的drawRect:方法:当系统决定将对象绘制到屏幕上时调用它。您不主动绘制到屏幕非常重要。系统会要求您绘制屏幕,​​然后您做出回应。
    • 一组重要的事件是在程序开始时调用的事件,如applicationDidFinishLaunching:或从xib文件viewDidLoad加载视图时调用的事件。 / LI>
  • Aaron Hillegass对这种情况做了一个很好的比喻:你是KITT并回应Michael Knight的命令,而不是相反。那么你需要超过一定的年龄来理解这个类比......

答案 2 :(得分:1)

应首先运行的另一件事是在App Delegate(定义如下:NSObject <UIApplicationDelegate>并在nib中设置)方法applicationDidFinishLaunching

这在技术上显然不是第一个被运行的东西。主循环和UIApplication中的任何内容都将首先执行,但一般来说,这是iOS应用程序的良好起点,也是您真正掌控的第一个起点。

您还可以创建一个名为“Controller”的类,并将NSObject拖到您的nib中,并将该类设置为Controller。然后将调用方法awakeFromNib

其中任何一个都应该可以设置你的应用程序。