最近看了些Runtime Runloop的一些知识.边看边摸索.看到群里有人在问 一些面试题.其中就提到了app的启动流程.

所以这里也研究小结一下,以供自己学习备用.

1.项目要运行,就要有入口. OC语言的入口就在main.m 文件.下面看main.m里都有什么可以窥探的.

int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

在自动释放池里我们可以看到里面就一行代码

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

这行代码我们手打一下.可以看到传的参数

UIApplicationMain(<#int argc#>, <#char * _Nonnull * _Null_unspecified argv#>, <#NSString * _Nullable principalClassName#>, <#NSString * _Nullable delegateClassName#>)

下面我们一步步解析这句关键的代码如何启动App

UIApplicationMain 就是OC的入门点. 里面传递了四个参数:

argc 是一个int参数

argv 是一个char 参数

principalClassName 主程序类名( 当值为 nil 时,默认是UIApplication)

delegateClassName 代理类名 默认就是常见的AppDelegate类

在上面的传参时候用到了NSStringFromClass 方法.

NSStringFromClass 是将类名转化为字符串的转化函数.与此类似的还有字符串转化类名的NSClassFromString.

2.设定了对象和代理之后就是NSRunloop 来保持程序一直运行处理事件(详情请看上一篇说的runloop文章)

3.接下来就是info.plist文件.检查是否通过main.storyboard加载指定的控制器. 把新创建的控制器作为窗口的跟控制器,让窗口显示出来.如果没有则会在下面方法中创建UIWindow 来作为主窗口

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

//创建UIWindow 来作为主窗口

return YES;

}

4.最后通过执行程序AppDelegate的代理.程序完成启动

iOS app启动流程的更多相关文章

  1. 马蜂窝 iOS App 启动治理:回归用户体验

    增长.活跃.留存是移动 App 的常见核心指标,直接反映一款 App 甚至一个互联网公司运行的健康程度和发展动能.启动流程的体验决定了用户的第一印象,在一定程度上影响了用户活跃度和留存率.因此,确保启 ...

  2. iOS App上架流程(2016详细版)

    iOS App上架流程(2016详细版) 原文地址:http://www.jianshu.com/p/b1b77d804254 感谢大神整理的这么详细 一.前言: 作为一名iOSer,把开发出来的Ap ...

  3. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  4. Android Activity启动流程, app启动流程,APK打包流程, APK安装过程

    1.Activity启动流程 (7.0版本之前) 从startActivity()开始,最终都会调用startActivityForResult() 在该方法里面会调用Instrumentation. ...

  5. 女儿拿着小天才电话手表问我App启动流程

    前言 首先,new一个女儿, var mDdaughter = new 女儿("6岁","漂亮可爱","健康乖巧","最喜欢玩小天 ...

  6. IOS (APP 启动 相应处理)

    APP 每次启动的入口都是通过: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...

  7. iOS App 启动性能优化

    1. App启动过程 解析Info.plist 加载相关信息,例如如闪屏 沙箱建立.权限检查 Mach-O加载 如果是胖二进制文件,寻找合适当前CPU类别的部分 加载所有依赖的Mach-O文件(递归调 ...

  8. iOS App上架流程(2016详细版)来源DeveloperLY

    一.前言: 作为一名iOSer,把开发出来的App上传到App Store是必要的.下面就来详细讲解一下具体流程步骤. 二.准备: 一个已付费的开发者账号(账号类型分为个人(Individual).公 ...

  9. iOS 程序启动流程

    iOS程序启动原理   技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong   iOS应用程序运行 ...

随机推荐

  1. 探索一个NSObject对象占用多少内存?

    1 下面写代码测试探索NSObject的本质 Objective-C代码,底层实现其实都是C\C++代码 #import <Foundation/Foundation.h> int mai ...

  2. deepin、Ubuntu安装Nginx

    deepin安装nginx 切换至root用户 su 密码: 基础库的安装 安装gcc g++的依赖库 sudo apt-get install build-essential && ...

  3. ES6学习路上的小学生,promise处理异步操作,简易原始起步之用。先能用,再深究!

    ES6的promise对象,让我们更容易的处理这样的需求:执行完一个方法以后,再去执行下一个方法. 理解尚浅之时,先用于项目之中. var promise1 = new Promise(functio ...

  4. linux添加自定义命令

    想添加一个命令, 比如我输入 cdms 按回车, 然后就执行了: cd /mnt/gopath/src/test/app/ 这条命令方法: vi /etc/bashrc 在文件末尾添加 alias c ...

  5. 步步为营-84-数字转化为金额的Js+enter键取消页面刷新

    说明:来不及细说了,老铁快上车 function fmoney(s, n) { console.log(s); n = n > && n <= ? n : ; s = pa ...

  6. 常见的爬虫分析库(2)-xpath语法

    xpath简介 1.xpath使用路径表达式在xml和html中进行导航 2.xpath包含标准函数库 3.xpath是一个w3c的标准 xpath节点关系 1.父节点 2.子节点 3.同胞节点 4. ...

  7. gulp构建自动化项目

    'use strict'; var gulp = require('gulp'), browserSync = require('browser-sync').create(), SSI = requ ...

  8. hdfs数据到hbase过程

    需求:将HDFS上的文件中的数据导入到hbase中 实现上面的需求也有两种办法,一种是自定义mr,一种是使用hbase提供好的import工具 一.hdfs中的数据是这样的 hbase创建好表 cre ...

  9. 隐藏WIN10资源管理器中的3D对象文件夹

    1.WIN+R,打开运行窗口,输入“regdeit”启动注册表编辑器 2.定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ...

  10. 不显示TensorFlow加速指令警告

    vim ~/.bashrc 在打开的文件中追加: export TF_CPP_MIN_LOG_LEVEL= 最后再执行 source ~/.bashrc