iPhone 程序骨架浅析

来源:互联网 发布:mac双系统怎么删除win7 编辑:程序博客网 时间:2024/04/27 15:52

接触iPhone开发半年多了。

想想基础知识很薄弱,简单来讲,我很难清楚的解释什么是File's owner 程序从springBoard里启动开始又是如何加载进来的一些细节也一直模糊不清。

今天查了官方文档,写下自己的关于iPhone程序的骨架认识。




这是从官方文档上截的图片。

It creates an application object, connects to the window server, establishes the run loop, and so on. Most of the work is done by theUIApplicationMain function as illustrated in picture.

当点击一个应与图标,进入程序这一刻,ios创建了与此程序对应的UIApplication instance实例,这是通过在main函数里的UIApplicationMain方法。

 int retVal = UIApplicationMain(argc, argv,nil, nil);

这个函数的作用是启动住时间循环并开始运行应用程序,前面的两个参数传递了命令行参数(如果有的话),第三个和第四个参数致命了应用程序的主类和它的应用程序委托,这个委托是一个处理程序声明周期管理时间的类(既appDelegate).如果都是nil,UIKit就假定它需要从一个nib文件装入应用程序。


此时,程序会查找info.plist文件(这个文件中有很多基础的程序配置),找到应用程序的主要nib包(MainNibFile),一般都是MainWindow.xib.在MainWIndow.xib中实际上就有UIKit希望找到的程序委托,File's Owner这里就是我们的程序UIApplication instance.它的delegate已经连接了一个类(一般都是在创建工程时自动添加到工程中的,名字与你的工程名字向一直,XXXAppDelegate).MainWindow里还有一个UIWindow类实例,每个应用程序都需要有一个window。

iphone程序只有一个window(UIWindow),其他的所有的view都在这个window上,可以window是其他所有view的包容器。

当程序启动,加载nib文件后,它会通知它的代理处理

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个消息。既,在屏幕现实给用户之前,需要handle的一系列操作将在这个方法里处理。

在这里,需要创建自己的controller实例,把controller的view加到window里。

这里,window实例是通过在加载nib文件时由IB初始化的,在MainWIndow.xib中,window作为IBOutlet连接到了AppDelegate中,这是因为在AppDelegate里已拥有window这个属性变量。

你需要做的,就是打开你的MainWindow.xib对应的查看AppDelegate类中stub的内容。

也许我的表述不够清楚,但是我通过一天的整理,自己能够理解流程,各个类的调用关系。仅作为自己的学习笔记把。


原创粉丝点击