美文网首页iOS
iOS App启动过程

iOS App启动过程

作者: ChancePro | 来源:发表于2018-04-26 14:44 被阅读16次

使用dyld2启动应用的过程

1.加载dyld到App进程(dyld首先读取mach-o Header和load commands,接着就知道了这个可执行文件依赖的动态库)
2.加载动态库(包括所依赖的所有动态库)
3.Rebase & Bind (使用了ASLR地址空间布局随机化和Code Sign来保证应用的安全,Rebase修正内部指针指向,Bind修正外部指针指向)
4.初始化Objective-C Runtime (Runtime维护了一张映射类名与类的全局表,当加载一个dylib时,把类的信息注册到这个全局表中,也会把Category中的方法注册到对应的类中)
5.Initializers 其他初始化代码
6.dyld调用main()函数,main()函数调用UIApplicationMain(),程序启动。

dyld3加载方式

分析Mach-o Headers
分析依赖的动态库
查找需要Rebase & Bind之类的符号
把上述结果写入缓存

main函数之后:

(一)有storyboard
1.main函数
2.UIApplicationMain
创建UIApplication对象
创建UIApplication的delegate对象
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard
创建UIWindow
创建和设置UIWindow的rootViewController
显示窗口
(二)没有storyboard
1.main函数
2.UIApplicationMain
创建UIApplication对象
创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统时间
程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
在application:didFinishLaunchingWithOptions:中创建UIWindow
创建和设置UIWindow的rootViewController
显示窗口

优化启动时间

main函数之后

能延迟执行的就延迟执行。比如SDK的初始化,界面的创建。
不能延迟执行的,尽量放到后台执行。比如数据读取,原始JSON数据转对象,日志发送。

main函数之前

减少动态库的数量
合并Category和功能类似的类。删除无用的方法和类。
用initialize替代load。

相关文章

  • 深入理解iOS App的启动过程

    前言 参考资料:深入理解iOS App的启动过程iOS 应用程序启动过程及原理总结iOS:App启动过程详解(不同...

  • iOS 关于启动app播放视频功能

    iOS 关于启动app播放视频功能 iOS 关于启动app播放视频功能

  • iOS 11.0后APP的图标和启动图

    iOS11.0后APP的图标和启动图iOS 11 AppIcon 和启动图尺寸关于iOS APP设置启动图片

  • iOS启动优化

    iOS App启动优化 iOS启动可分为冷启动和热启动两种冷启动:app为kill状态下点击app启动热启动:ap...

  • iOS App启动优化—— 了解App的启动流程

    iOS App启动优化—— 了解App的启动流程

  • iOS App启动过程

    使用dyld2启动应用的过程 1.加载dyld到App进程(dyld首先读取mach-o Header和load ...

  • ios app 启动过程

    程序入口点 当iOS app启动时,系统会根据app bundle中的 Info.plist 文件中的 Execu...

  • iOS App启动过程

    来源:吴白链接:http://www.jianshu.com/p/231b1cebf477 程序启动逻辑 使用Xc...

  • iOS App启动过程

    总结来说,大体分为如下步骤: (1) 系统为程序启动做好准备 当kernel(内核)做好程序的启动准备工作之后,系...

  • iOS APP启动过程

    首先了解一下程序执行的四个步骤 预处理, 展开头文件/宏替换/去掉注释/条件编译 编译, 检查语法,生成汇编 ...

网友评论

    本文标题:iOS App启动过程

    本文链接:https://www.haomeiwen.com/subject/dujplftx.html