iOS程序的启动过程介绍

转载 2013年12月05日 15:55:04

 大家在学习iPhone开发时候,都会写HelloWorld程序。大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序。但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么?有理解了这个才能游刃有余的掌握iPhone程序的开发,否则在写程序的时候有点浑浑僵僵不知所以然的感觉。

    在开始介绍HelloWorld程序之前,我们先了解下UIApplication:

UIApplication

    UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。

    UIApplication的一个主要工作是处理用户事件,它会起一个队列,把所有用户事件都放入队列,逐个处理,在处理的时候,它会发送当前事件到一个合适的处理事件的目标控件。此外,UIApplication实例还维护一个在本应用中打开的window列表(UIWindow实例),这样它就可以接触应用中的任何一个UIView对象。UIApplication实例会被赋予一个代理对象UIApplicationDelegate,以处理应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)等等。

    每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。你可以通过调用[UIApplication sharedApplication]来得到这个单例实例的指针。

 

HelloWorld程序

    打开项目文件,找到Other Sources文件夹下的main.m源文件,打开,你将会看到如下代码:

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

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

[pool release];

return retVal;

}

    和所有的C程序一样,这是个程序入口main函数(NSAutoreleasePool内存自动回收池,不在这篇文章讨论的范围)。接下来我们来看UIApplicationMain函数,查看iPhone开发文档:

int UIApplicationMain ( 
   int argc, 
   char *argv[], 
   
NSString *principalClassName, 
   
NSString *delegateClassName 
);
 

前两个参数我们不多说,学过C语言的都知道。
第三个参数,是UIApplication类名或者是其子类名,如果是nil,则就默认使用UIApplication类名。
第四个参数是协议UIApplicationDelegate的实例化对象名,如果是nil,则从main nib文件中加载委托对象。这个对象就是UIApplication对象监听到系统变化的时候通知其执行的相应方法。
在我们生成的HelloWorld应用程序中,第三个和第四个参数都为nil,那么也就是UIApplication和HelloWorldAppDelegate咯。HelloWorldAppDelegate实现了UIApplicationDelegate协议,可以重写其所有方法。
我们在打开HelloWorldAppDelegate文件,我们会看到这样的代码:

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

    // Override point for customization after application launch. 
     
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
}

我们知道,每个应用程序有个UIWindow,这window负责管理和协调应用程序的屏幕显示。在这里把HelloWorldViewController实例赋值给window的rootViewController,rootViewController的view将会作为UIWindow的首视图。
好的,我们就可以HelloWorldViewController的loadView添加我们所需要的控件了:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)loadView 

    // add control 
}

    至此,HelloWord程序启动过程以及介绍完成,大家对程序的启动过程有没有新的认识?

   

    总结程序启动的过程如下:

1. 程序入口main函数创建UIApplication实例和UIApplication代理实例。

2. 在UIApplication代理实例中重写启动方法,设置第一ViewController。

3. 在第一ViewController中添加控件,实现应用程序界面。

举报

相关文章推荐

ios程序的启动过程介绍

转载自 http://www.cnblogs.com/ydhliphonedev/archive/2012/07/30/2615801.html 大家在学习iPhone开发时候,都会写Hello...

iOS程序的启动过程介绍

大家在学习iPhone开发时候,都会写HelloWorld程序。大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序。但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

IOS程序启动的完整过程

一、IOS启动的完整过程 1.main函数 2.UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delega...

iOS-程序的启动过程以及相关的注意事项

iOS程序运行原理图 虽然建立了一个App,对于它的执行过程我们还是一无所知,让我们首先找到它的入口,Support Files/main.mint main(int argc, char ...

Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法

Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在...

iOS程序启动过程

参考文章:http://www.cnblogs.com/ydhliphonedev/archive/2012/07/30/2615801.html 参考文章:http://www.w2bc.com/...

iOS之应用程序启动过程及原理总结

当用户点击应用图标之后,应用就开始启动。应用启动完成后,就会展示一系列的视图,和用户进行各种各样的交互(如滑动、点击)。当用户退出应用后,该应用就无法和用户进行交互。这一过程就体现了一个应用的生命周期...

iOS个人整理05-应用程序的启动流程--视图控制器ViewController的加载过程--MVC架构

一、ViewController 之前我们所有的View都是写在Appdelegate.m的launch函数里的,这样显然不方便,太臃肿,系统给我们生成的模板就有一对ViewController文件,...

IOS开发入门----UIApplication和AppDelegate以及IOS程序启动的过程(2017/8/8)

一、什么是UIApplication UIApplication对象是应用程序的象征 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication shared...

ios中UIApplication的作用及ios程序的启动过程

转载注明出处!! 与Android中的Application类似,ios中的UIApplication就代表这一个应用程序。在ios中,每一个应用都有自己唯一的UIApplication 可以通过 s...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)