iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11464 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 锚定一个点,然后在这个点上深耕
免费
基础篇 (20讲)
01 | 建立你自己的iOS开发知识体系
02 | App 启动速度怎么做优化与监控?
03 | Auto Layout 是怎么进行自动布局的,性能如何?
04 | 项目大了人员多了,架构怎么设计更合理?
05 | 链接器:符号是怎么绑定到地址上的?
06 | App 如何通过注入动态库的方式实现极速编译调试?
07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?
08 | 如何利用 Clang 为 App 提质?
09 | 无侵入的埋点方案如何实现?
10 | 包大小:如何从资源和代码层面实现全方位瘦身?
11 | 热点问题答疑(一):基础模块问题答疑
12 | iOS 崩溃千奇百怪,如何全面监控?
13 | 如何利用 RunLoop 原理去监控卡顿?
14 | 临近 OOM,如何获取详细内存分配信息,分析内存问题?
15 | 日志监控:怎样获取 App 中的全量日志?
16 | 性能监控:衡量 App 质量的那把尺
17 | 远超你想象的多线程的那些坑
18 | 怎么减少 App 电量消耗?
19 | 热点问题答疑(二):基础模块问题答疑
20 | iOS开发的最佳学习路径是什么?
应用开发篇 (12讲)
21 | 除了 Cocoa,iOS还可以用哪些 GUI 框架开发?
22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?
23 | 如何构造酷炫的物理效果和过场动画效果?
24 | A/B 测试:验证决策效果的利器
25 | 怎样构建底层的发布和订阅事件总线?
26 | 如何提高 JSON 解析的性能?
27 | 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪?
28 | 怎么应对各种富文本表现需求?
29 | 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?
30 | 如何制定一套适合自己团队的 iOS 编码规范?
31 | iOS 开发学习资料和书单推荐
32 | 热点问题答疑(三)
原理篇 (6讲)
33 | iOS 系统内核 XNU:App 如何加载?
34 | iOS 黑魔法 Runtime Method Swizzling 背后的原理
35 | libffi:动态调用和定义 C 函数
36 | iOS 是怎么管理内存的?
37 | 如何编写 Clang 插件?
38 | 热点问题答疑(四)
原生与前端共舞 (5讲)
39 | 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情?
40 | React Native、Flutter 等,这些跨端方案怎么选?
41 | 原生布局转到前端布局,开发思路有哪些转变?
42 | iOS原生、大前端和Flutter分别是怎么渲染的?
43 | 剖析使 App 具有动态化和热更新能力的方案
用户故事 (1讲)
用户故事 | 我是如何学习这个专栏的?
结束语 (1讲)
结束语 | 慢几步,深几度
iOS开发高手课
登录|注册

33 | iOS 系统内核 XNU:App 如何加载?

戴铭 2019-05-25
你好,我是戴铭。
在专栏的第 2 篇文章《App 启动速度怎么做优化与监控?》更新完之后,我看到很多同学对启动加载 App 的底层原理表示出了浓厚兴趣。所谓工欲善其事,必先利其器,相信有着好奇心的你,一定也会对支撑着 App 运行的操作系统有着各种各样的疑问。
我曾在专栏的第 5 篇文章《链接器:符号是怎么绑定到地址上的?》中,和你分享了链接器在编译时和程序启动时会做的事情。而今天这篇文章,我会重点与你说说加载动态链接器之前,系统是怎么加载 App 的。
所以,今天我会先跟你说说 iOS 系统的架构是怎样的,各部分的作用是什么,帮助你理解 iOS 系统的原理,进而更全面地理解它在 App 加载时做了哪些事情?
接下来,我就先跟你聊聊 iOS 的系统架构是怎样的。在理解 iOS 系统架构之前,你最好掌握一些操作系统原理的基础知识。

iOS 系统架构

iOS 系统是基于 ARM 架构的,大致可以分为四层:
最上层是用户体验层,主要是提供用户界面。这一层包含了 SpringBoard、Spotlight、Accessibility。
第二层是应用框架层,是开发者会用到的。这一层包含了开发框架 Cocoa Touch。
第三层是核心框架层,是系统核心功能的框架层。这一层包含了各种图形和媒体核心框架、Metal 等。
第四层是 Darwin 层,是操作系统的核心,属于操作系统的内核态。这一层包含了系统内核 XNU、驱动等。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

  • bart
    推荐大家回顾一下大学的《操作系统》,然后看一下《 深入解析Mac OSX & IOS 操作系统》,这样听起来会畅快很多。
    2019-05-30
    13
  • 毛成方
    Mike Ash文章最后总结说道大部分工程师不会去在意这些细节 但是当你在遇到动态链接等报错的时候 你讲更好去分析和解决它们。换句话说 我们要走出自己的舒适区 去研究新的技术 碰壁 总结 才能有更好的成长 去挑战更大的平台。
    2019-06-03
    5
  • 赵国辉
    老师,有没有计划讲解一下dyld的工作过程和原理,非常想学习一下

    作者回复: 可以看这篇 https://www.mikeash.com/pyblog/friday-qa-2012-11-09-dyld-dynamic-linking-on-os-x.html

    2019-05-29
    3
  • Bill
    多从提到了BSD BSD全称到底是啥

    作者回复: https://zh.wikipedia.org/zh/BSD

    2019-10-09
    1
  • Geek
    读后感: 真的看不懂,iOS开发需要这么深入吗?
    2019-05-30
    1
  • xilie
    读后感: 真的看不懂,iOS开发需要这么深入吗?
    2019-05-29
    1
  • 烩面
    老师,是先 fork 出新进程,还是先分配内存呢? 小结和上面对 __mac_execve 函数的分析上好像有点出入 。。。

    作者回复: fork 新进程之前内存并没有分配给新进程,是在 fork 新进程后再分配的,调用的函数是 exec_activate_image,这个函数会依据 execsw 加载二进制文件格式进行内存映射,对内存进行分配,对于 Mach-O 格式使用的是 exec_mach_imgact() 函数。文中已有说明。

    2019-05-26
  • yujian
    请问:app被拒后,申诉仅解释一下,但是代码不动还用原来的ipa,想问是否还需要重新提交审核么
    2019-05-26
    1
  • 凛冬一壶酒
    这个可以有 哈哈哈
    2019-05-26
  • opooc
    帅!看来得多听几遍了
    2019-05-25
收起评论
10
返回
顶部