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之应用程序启动过程及原理总结

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

ios程序的启动过程介绍

转载自 http://www.cnblogs.com/ydhliphonedev/archive/2012/07/30/2615801.html 大家在学习iPhone开发时候,都会写Hello...
  • qq_20152509
  • qq_20152509
  • 2015年03月01日 18:31
  • 150

ios启动过程简述

1、参考资料         A、ios安全保护--白皮书         B、知乎 2、启动过程简述       打开Ios设备后,其应用程序处理器会立即执行只读内存(称为Boot Rom)...
  • HK_5788
  • HK_5788
  • 2016年08月16日 18:12
  • 576

iOS:App启动过程详解(不同方式)

--------------------xib 运用 在程序起始----------------- -------xcode4.0以前 应用程序开始的时候没有指定和创建delegete,是通过一个x...
  • houseq
  • houseq
  • 2014年07月31日 10:06
  • 2552

Cocos2d-x 启动过程详解:渲染

本文主要讲解Cocos2d-x的整体启动过程:Cocos2d-x 在各个平台的实现代码是一样的,只要针对不同平台做相应的配置就可以了。 一、启动前奏 现在来看一下在iOS平台下的相关结构:...
  • wanglang3081
  • wanglang3081
  • 2014年09月13日 16:59
  • 2450

STM32的启动过程分析

STM32的启动过程分析
  • wheat_in_winner
  • wheat_in_winner
  • 2016年12月12日 15:36
  • 926

Android 启动过程的简述

1. Bootloader 引导 当我们按下手机的电源键时,首先会运行bootloader,bootloader的主要作用是初始化基本的硬件设备(例如 CPU 内存 Flash等),并且建立空间映射...
  • u010018855
  • u010018855
  • 2015年11月24日 15:19
  • 317

ios程序的启动过程

在学习ios程序的时候,一般都会通过xcode的向导生成项目,且程序也能跑起来,很明显是xcode为我们做了很的工作,而这些工作对于想学好ios开发的我们而言是必须要了解的。 1.学过c语言的同学应...
  • gx_wqm
  • gx_wqm
  • 2015年07月04日 16:58
  • 387

iOS程序的启动过程

程序的入口是main函数. int main(int argc, char * argv[]) {     @autoreleasepool {        return UIAppl...
  • u011066814
  • u011066814
  • 2015年09月27日 10:41
  • 144

iOS App 的完整启动过程

解析 Info.plist 加载相关信息,例如闪屏。 沙箱(SandBox)建立、权限检查。 Mach-O 加载 如果是胖二进制文件,寻找合适当前 CPU 类别的部分。 加载所有依赖的 Mach-...
  • qinqi376990311
  • qinqi376990311
  • 2018年01月11日 10:47
  • 33
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS程序的启动过程介绍
举报原因:
原因补充:

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