我在刚接触iOS开发的时候,也对这个运行流程模糊不清。
希望这边文章能对初学的朋友给予帮助。
1. 和大多数语言一样,每一个iPhone应用也都是从主函数开始运行,它的main函数都在XCode的Other Reasource逻辑目录下。
系统会自动给你生成上面的代码,第三个参数和第四个参数指明了应用程序的生命周期管理类和对生命周期管理类产生事件进行响应的委托类,第三个参数被指定为nil则会被视为UIApplication,程序的生命周期管理类一般就是UIApplication,也或者是他的子类(一般没人这么干吧?)。
第四个参数如果是nil的话,则该函数会去参考**-info.plist这个配置文件来获得一个主NIB文件以完成余下的工作。
在**-info.plist文件中他会去找Main nib file base name这一列的值作为要载入的NIB文件名。(默认都是MainWindow)
并且从中指定生命周期管理类的委托。
2. 打开Resource目录下的MainWindowa.xib,会看到Files‘s Owner的Class是UIApplication。
这个类有一个委托,Interface Builder将他连接到了** App Delegate。这里的意思就是说在运行周期中UIApplication会产生一些事件,但是他交给了** APP Delegate来做处理。
打开** APP Delegate.h,默认是在Classess逻辑目录下。可以看到UIWindow和一个Controller都被声明成了IBOutlet。
这样就可以在Interface Builder里连接,并且完成相应的初始化工作。
观察MainWindow.xib的** APP Delegate实例,Interface Builder已经为我们连接上了一个Window和一个Controller实例。
再看看** APP Delegate.m。
他在UIApplication的这个回调方法中,将Controller的视图加载到了Window上。
关于这个回调方法文档当中有这么一句话, It is called after your application has been launched and its main nib file has been loaded. 就是说在程序运行起来并且主nib文件完成加载后,这个委托方法将会被调用。
整个程序目前暂时不需要我们考虑的初始化流程就结束了, 在这之后,我们就可以加入我们程序的逻辑了。
由于时间仓促,如有疏漏还请大家指出。
希望本文可以帮到你。