在一个包含大量.h和.m文件的Xxode项目中,如何确定首先执行哪个文件?
答案 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应用完全由事件驱动。通过阅读源代码文件,可以理解方法执行的顺序。
main
中的main.m
功能。它会立即拨打UI/NSApplicationMain
。NS/UIApplicationMain
是Cocoa(-Touch)提供的功能。它监视用户交互,并相应地触发事件。
drawRect:
方法:当系统决定将对象绘制到屏幕上时调用它。您不主动绘制到屏幕非常重要。系统会要求您绘制屏幕,然后您做出回应。 applicationDidFinishLaunching:
或从xib文件viewDidLoad
加载视图时调用的事件。 / LI>
答案 2 :(得分:1)
应首先运行的另一件事是在App Delegate(定义如下:NSObject <UIApplicationDelegate>
并在nib中设置)方法applicationDidFinishLaunching
这在技术上显然不是第一个被运行的东西。主循环和UIApplication中的任何内容都将首先执行,但一般来说,这是iOS应用程序的良好起点,也是您真正掌控的第一个起点。
您还可以创建一个名为“Controller”的类,并将NSObject拖到您的nib中,并将该类设置为Controller。然后将调用方法awakeFromNib
。
其中任何一个都应该可以设置你的应用程序。