转载请注明出处 :http://write.blog.csdn.net/postedit/7719014
这里结合在网上找到的几篇关于介绍iso生命周期的文章这里做下总结,不多说直接进主题。
在iPhone中,用户通过点击主页面上的程度图标启动一个程序。点击后,系统会显示一个过渡的画面然后调用main()函数来加载程序。从这一刻开始,大量的初始化工作都交给了UIKit,它加载程序的用户界面并启动事件循环。在时间循环过程中,UIKit将传入的时间和自定义对象相关联并响应程序的命令事件。如果用户的某个操作引起程序的退出,UIKit会通知程序并开始结束程序过程。
在iPhone程序中,main() 很少被使用。绝大多数的实际工作都交给UIApplicationMain()函数来处理。
main()函数主要完成3个工作:
1、创建一个自动释放池
2、调用UIApplicationMain()函数
3、释放自动释放池。一般来说,开发者不需要修改main()函数
UIApplicationMain函数是初始化程序的核心,它接收4个参数,通常情况下前两个不用管,后两个一个是程序的主要类和代理类。主要类为nil,则默认为UIApplication;如果代理类为nil,则假设程序的代理类来自MainWindow.xib文件。这个MainWindow .xib文件当程序自动创建后实际上就自动生成了一个UIApplication的实例和一个代理类的实例。当然如果你不用Xcode自动生成好的,你也可以自己来创建这个UIApplication类和代理类。当然了,官方不建议你自己新建UIApplication的实例类,如果你创建了自定义的主要类你要继承UIApplication这个类,并且传入的第三个参数要用你自己的实现的这个主类的名字,这些都是不建议你弄的,所以在开发的过程中就不要画蛇添足了,用系统为你生成的就好了。
接下来我们看一下启动过程:
前面我们说了main()的三大功能,这里当程序执行
int retVal=UIApplicationMain(argc,argy,nil,nil); 创建UIApplication实例,同时会查看应用程序的Info.plist文件,该文件中除了记录了一些应用程序的基础信息外,还包含了应用程序资源文件的名称。如下所示:
<key>NSMainNibFile</key>
<string>MainWindow</string>
其实就是在启动的时候去加载nib文件中声明的MainWindow.xib文件。打开这个文件我们可以看到
File's Owner 对象,实际上就是刚才我们创建的UIApplication的实例。
First Responder对象。因为每个程序都会有第一个响应者,它就是对应的那个对象,这里我们可以理解为一个动作的对象。主界面一般都会显示在别的xib文件中,而当我们点击menu的时候不管程序显示的当前哪个界面都会退出。这就是点击menu的时候实际上找的是MainWindow.xib 文件里面的FileOwnder。
Delegate (代理)对象
应用程序启动后,会发送消息给UIApplicationDelegate的applicationDidFinishLaunching方法,我们可以在这个方法里面完成自己的初始化过程。说白了就是把自己定义的UIViewControl放到MainWindow 的window对象中去。这里可以把window比作画板,而我们自己实现的UIViewControl就好比是一张纸,至于在这个纸上想画些什么那就要看我们想在这个纸上放什么控件了。Delegate对象就是来完成这个把纸粘到画板上的操作,其实也就是在下面这个方法中完成的具体的实现。这里iphone的实现其实要比Android的实现复杂了很多。iphone都是用这种委托的方式来管理UIViewControl的,这也算是ios框架里面的一个精髓了。
1. - (void)applicationDidFinishLaunching:(UIApplication *)application {
2.
3. // Override point for customization after app launch
4. [window addSubview:viewController.view];
5. [window makeKeyAndVisible];
6. }
7.
8. - (void)dealloc {
9. [viewController release];
10. [window release];
11. [super dealloc];
12. }
总结以上内容: iphone应用程序的引导过程如下:
main()->UIApplicationMain()->MainWindow.xib->xxDelegate.m->xxViewController.m(xxViewController.xib)
或者参考一下这个图吧:
转载请注明出处: http://write.blog.csdn.net/postedit/7719014