一、程序启动原理

1.1、main函数中执行了一个UIApplicationMain这个函数UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

1.2、argc、argv:直接传递给UIApplicationMain进行相关处理即可

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

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

1.3、UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性

1.4、接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对application:didFinishLaunchingWithOptions:方法)

1.5、程序正常退出时UIApplicationMain函数才返回

#import <UIKit/UIKit.h>
#import"AppDelegate.h"int main(int argc, char * argv[])
{
@autoreleasepool {
// return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
// return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([AppDelegate class]));/*
argc: 系统或者用户传入的参数个数
argv: 系统或者用户传入的实际参数
1.根据传入的第三个参数创建UIApplication对象
2.根据传入的第四个产生创建UIApplication对象的代理
3.设置刚刚创建出来的代理对象为UIApplication的代理
4.开启一个事件循环
*/return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
}
} 
 
二、程序启动的完整过程

从main文件开始说起程序启动分为两类:1.有storyboard 2.没有storyboard

(一)有storyboard情况下:
1.main函数

2.UIApplicationMain

    - 创建UIApplication对象
    - 创建UIApplication的delegate对象

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

    - 创建UIWindow
    - 创建和设置UIWindow的rootViewController
    - 显示窗口

(二)没有storyboard情况下:
1.main函数

2.UIApplicationMain

    - 创建UIApplication对象
    - 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)

    - 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
    - 在application:didFinishLaunchingWithOptions:中创建UIWindow
    - 创建和设置UIWindow的rootViewController
    - 显示窗口
 
 

App启动原理和启动过程的更多相关文章

  1. 【SpringBoot】 理解SpringBoot的启动原理

    前言 前文已经介绍了Spring Bean的生命周期,那么使用过程中发现SpringBoot 的启动非常快捷,本文将介绍SpringBoot的内部启动原理. 启动过程 如上图所示,我们先分析下Spri ...

  2. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

  3. iOS APP程序启动原理

    UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...

  4. iOS开发app启动原理及视图和控制器的函数调用顺序

    main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...

  5. SpringMVC 原理 - 设计原理、启动过程、请求处理详细解读

    SpringMVC 原理 - 设计原理.启动过程.请求处理详细解读 目录 一. 设计原理 二. 启动过程 三. 请求处理 一. 设计原理 Servlet 规范 SpringMVC 是基于 Servle ...

  6. 【iOS翻译】App启动时的响应过程

    Responding to the Launch of Your App Initialize your app’s data structures, prepare your app to run, ...

  7. iOS的常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  8. iOS常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  9. 老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源

    老李推荐:第5章6节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 初始化事件源   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试 ...

随机推荐

  1. 判断一个浏览器是否支持opacity

    支持opacity的浏览器,总会将opacity值规范成小于1.0且以0开头的值.例如,如果将opacity指定为:.5,原始支持opacity的浏览器就会将该值规范为0.5,而不支持opacity的 ...

  2. 平衡二叉树--java

    package com.test.tree; /** * 带有平衡条件的二叉查找树 * */ public class AVLBinarySearchTree<T extends Compara ...

  3. 如何在windows上部署war包到tomcat服务器

    一. 什么是war包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将很多文件组合成一个压缩文件.war专用在web方面,一个war包可以理解为一个web项 ...

  4. iOS-文本转语音

    - 文本转语音 iOS提供了一个类AVSpeechSynthesizer来实现文本到语音的功能, 即读出文字 直接上代码: AVSpeechSynthesizer *synthesizer = [[A ...

  5. 原生js实现用鼠标画图

    代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. CodeForces - 1025D: Recovering BST (区间DP)

    Dima the hamster enjoys nibbling different things: cages, sticks, bad problemsetters and even trees! ...

  7. MySQL实战 | 06/07 简单说说MySQL中的锁

    原文链接:MySQL实战 | 06/07 简单说说MySQL中的锁 本文思维导图:https://mubu.com/doc/AOa-5t-IsG 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. ...

  8. UOJ#454. 【UER #8】打雪仗

    UOJ#454. [UER #8]打雪仗 http://uoj.ac/problem/454 分析: 好玩的通信题~ 把序列分成三块,\(bob\)先发出这三块中询问点最多的一块给\(alice\). ...

  9. swing之checkbox

    import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax ...

  10. Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)

    版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ 在学习UGUI的过程中,一直使用小图也就是散图,一个按钮一个图 ...