五、程序启动的完整过程

程序启动的完整过程:

1、先执行main函数,main内部会调用UIApplicationMain函数,该函数的声明如下:

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

argc、argv:标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可

principalClassName:指定应用程序类,该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值

   delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议。

2、在UIApplicationMain函数里面做了如下几件事情:

  (1)、根据传入的第三个参数创建UIApplication对象或它的子类对象。如果该参数为nil,直接使用该UIApplication来创建。(该参数只能传人UIApplication或者是它的子类)

  (2)、根据传入的第四个参数创建AppDelegate对象,并将该对象赋值给第1步创建的 UIApplication对象的delegate属性。

  (3)、开启一个事件循环,循环监控应用程序发生的事件。每监听到对应的系统事件时,就会通知AppDelegate。

3、分两种情况:

(1)有stroyboard

> 应用程创建一个UIWindow对象(继承自UIView),并设置为AppDelegate的window属性。

> 加载Info.plist文件,读取最主要storyboard文件的名称。

> 加载最主要的storyboard文件,创建白色箭头所指的控制器对象。并且设置控制器为UIWindow的rootViewController属性(根控制器)。

> 展示UIWindow,展示之前会将添加rootViewController的view到UIWindow上面(在这一步才会创建控制器的view),其内部会执行该行代码:[window addSubview: window.rootViewControler.view];

(2)没有stroyboard

> 首先会调用delegate对象的application:didFinishLaunchingWithOptions:方法。

> 在application:didFinishLaunchingWithOptions:方法中需要主动创建 UIWindow对象。并设置为AppDelegate的window属性。

> 主动创建一个 UIViewController对象,并赋值给window的rootViewController属性。

> 调用 window的makeKeyAndVisible方法显示窗口。

时间: 2024-10-09 23:08:46

五、程序启动的完整过程的相关文章

程序启动的完整过程

程序启动的完整过程 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([MJAppDelegate class])); } } 执行顺序 1.main函数 2.UIApplicationMain 创建UIApplication对象 创建UIApplication的delegate对象 3.开启主运行循环 3(1).de

41-50(UIApplication和delegate,UIApplicationMain,UIWindow,程序启动的完整过程,控制器view的延迟加载)

41.UIApplication和delegate 42.UIPickerView 43.UIDatePicker 44.程序启动的完整过程 45.UIApplicationMain 46.UIWindow 47.如何创建一个控制器 48.控制器view的延迟加载 49.多控制器 50.UINavigationController的使用步骤 { 这几天一直在赶项目, 今天终于闲下来了! 今天是个好日子,空间里满天的2014520 那么来看看我们程序员的爱情吧! 爱情就是死循环,一旦执行就陷进去了

UIPickerView/UIDatePicker/程序启动的完整过程

一.UIPickerView 1.UIPickerView的常见属性 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id<UIPickerViewDataSource> dataSource; 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择) @property(nonatomic,assign) id<UIPickerViewDelegate>   deleg

UIPickerView,程序启动的完整过程

一.UIPickerView1.UIPickerView的常见属性// 数据源(用来告诉UIPickerView有多少列多少行)@property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;// 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择)@property(nonatomic,assign) id<UIPickerViewDelegate>   dele

Objective - C 学习笔记:程序启动的完整过程

1. main函数 2. UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 3.1 delegate代理开始处理(监听)系统事件  (没有storyboard) * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法 * 在application:didFinishLaunchingWithOptions:中创建UIWindow * 创建和

iOS程序启动的完整过程

1.main函数 2.UIApplicationMain* 创建UIApplication对象* 创建UIApplication的delegate对象 3.delegate对象开始处理(监听)系统事件(没有storyboard)* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法* 在application:didFinishLaunchingWithOptions:中创建UIWindow* 创建和设置UIWindow的

程序启动和运行过程

摘抄自:http://www.cnblogs.com/kenshincui/p/3890880.html#runProcess 程序的运行过程 在几乎所有的程序开发中程序一般都是从main函数开始运行的,那么IOS程序也不例外,在上图中我们可以看到Xcode为我们生成了一个main.m文件: // // main.m // FirstIOS // // Created by Kenshin Cui on 14-2-23. // Copyright (c) 2014年 Kenshin Cui. A

IOS 应用程序启动加载过程(从点击图标到界面显示)

今天帮同事解决问题的时候发现,造成程序BUG的原因是同事对程序的启动和试图的加载过程不熟悉.所以当局部代码没有问题,但是程序一运行却总不是我们想要结果的时候,我们应该想想是不是因为我们忽略了试图加载过程的原因.下面我们用一个例子来简单介绍一下启动过程中常见的几个方法.首先我们通过XIB 创建了一个试图控制器(名字叫Empty ,不要问我为为啥它叫这个名字,因为我太懒了,鼠标点快了就没去该),又创建了一个UIView的子类(MyView),并且将Empty的对象 设置为窗口的跟控制器,MyView

005-iOS App程序启动过程

掌握 • 1.项目中常见文件(Info.plist和pch文件的作用) • 2.UIApplication • 3.AppDelegate的代理方法 • 4.iOS程序的完整启动过程(UIApplication.AppDelegate.UIWindow.UIViewController的关系) • 1.项目中常见文件(Info.plist和pch文件的作用) Info.plist 1>Info.plist常见的设置 •建立一个工程后,会在Supporting files文件夹下看到一个“工程名-