惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

博客园 - 王彬iOS

AI时代iOS开发未来在哪里 iOS继承和多态 iOS OC中多线程总结 UIVIew和CALayer的区别 iOS远程推送APNs原理和基本配置 写个文章 iOS强制关闭暗黑模式2021.12.2 【原创】关于github那些事:如何把项目提交到coding上/gitLab上 Mac-Macs Fan Control(控制温度、随时改变风扇转速、电脑降温) Excel使用基础 NSRunLoopCommonModes和NSDefaultRunLoopMode区别(Timer) 数据统计---埋点 【问题汇总】iOS数据持久化 iOS APP 如何做才安全 【问题汇总】 【原创】苹果设备数据标准 【面试题】iOS知识大全 Swift——convenience(便利构造函数)和类方法 SVProgressHUD方法
iOS App启动过程
王彬iOS · 2024-06-25 · via 博客园 - 王彬iOS

1.点击一个app
首先,我们在手机上点击一个app图标
2.内核初始化

  • 操作系统收到启动app的消息后,会调用内核代码初始化内存空间,为app创建进程
  • 然后操作系统通过系统调用读取并解析app的可执行文件
  • 然后操作系统的动态链接器根据app的可执行文件的符号表去加载app运行依赖的动态库,或者叫共享库,并与符号表进行绑定,如果动态库已经加载过的话就直接绑定就行了,因为很多动态库是app共享的,可能在内存常驻。
  • 经过动态绑定以后,app的所有可执行代码和数据都已经准备就绪了,这个时候操作系统为app分配堆栈空间,拷贝代码和数据到内存等一系列操作
  • 然后确定程序启动的内存位置,开始执行具体的二进制指令
    3.从开始到main函数
    代码指令并不是从main函数开始执行的,在main函数之前还有一系类的关于代码的初始化操作,比如:
  • runtime运行时初始化。
    全局变量的初始化。
    4
    执行UIApplicationMain
  • 第二步在UIApplicationMain内部执行,根据principalClassName创建UIApplication对象
  • 第三步根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性。所以,我们的AppDelegate遵循UIApplicationDelegate协议
    5.* 开启一个主运行循环,处理事件,可以让程序保持运行
  • 接下来,要加载info.plist,info.plist相当于我们应用程序的配置文件
    6.为了实现多窗口功能,苹果修改了使用多年的AppDelegate,把AppDelegate分为了两部分,AppDelegate和SceneDelegate,其中
  • AppDelegate处理应用程序状态的改变,比如应用程序的加载,退出
  • AppDelegate中新增对scene的支持
    7.使用Scene Delegate之后,UIApplicationDelegate将不再持有UIWindow,它将转移至UIWindowSceneDelegate代理中
    最后我们从加载配置文件开始重新梳理一下对于大于IOS13的启动过程
  • 首先调用AppDelegate中的configurationForConnectingSceneSession协议,该协议会返回默认加载场景的UISceneConfiguration*
  • 在Info.plist->Application Scene Manifest->Scene Configuration->Application Session Role中寻找场景列表,如果有,根据上一步返回的值匹配应该加载哪个场景,如果上一步返回nil,匹配列表中的第一个。如果列表为空,不加载场景,这时候应该是黑屏
  • 如果匹配到了场景信息
    • 如果包含storyboard,加载界面storyboard到UIWindow,执行下一步
    • 否则,继续执行下一步
  • 开始执行场景委托的willConnectToSession协议方法
  • 该协议中可以初始化并显示UIwinodw,如果不进行处理,UIWindow就用之前加载过的storyboard
  • 显示界面,完成。

另外, 我的心愿是 世界 和平

posted @ 2024-06-25 12:07  王彬iOS  阅读(399)  评论()    收藏  举报