2023年10月7日
底层
架构
一、iOS 的诞生1、macOS 的历史1984 年,Apple 发布了第一款计算机 Macintosh 128K,Macintosh 以其标志性的图形用户界面(GUI)和用户友好的设计,彻底改变了计算机行业,取代了当时普遍使用的命令行界面。这个阶段,Macintosh 中的操作系统名称为 ...
阅读全文
2023年8月16日
优化
一、常规文件访问以 NSUserDefaults 为例,看下传统文件读写流程。
1、NSUserDefaults 基本使用12345NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];// 写[defaults s ...
阅读全文
2022年10月15日
底层
一、基本使用dispatch_once 常被用来实现单例,如下是创建单例的一个最基本的用法:
123456789101112@implementation TestObject+ (instancetype)sharedInstance { static TestObject ...
阅读全文
2022年10月2日
源码
热修复
一、基本使用MangoFix 是 iOS 中另一个热修复 SDK,其实现原理与 JSPatch 不同。MangoFix 定义了一套与 OC 相似语法规则,使用该规则编写热修复代码,并使用 Lex、Yacc 实现词法分析器、语法分析器处理热修复代码生成抽象语法树 AST 并解释执行,再利用 R ...
阅读全文
2022年9月10日
源码
热修复
一、基本使用JSPatch 基于 JavaScriptCore、Runtime 实现,可以使用 JavaScript 代码对原方法进行重写(覆盖)、新增方法等,实现对线上问题代码的修复,例如:假设 JPViewController 中按钮点击事件如下:
123456@implementat ...
阅读全文
2022年5月3日
热修复
编译原理
一、概述Lex 和 Yacc 是编译器和解释器开发中广泛使用的工具,分别用于词法分析和语法分析。它们通常配合使用,帮助开发者快速构建语言处理工具,处理复杂的语言解析任务。
Lex(Lexical Analyzer Generator)是词法分析器生成器,Yacc(Yet Another Co ...
阅读全文
2022年5月1日
编译原理
一、低级语言与高级语言1、低级语言低级语言(Low-level Language)是接近计算机硬件的编程语言,是计算机可以直接执行或接近直接执行的语言。
常见的低级语言包括:
机器语言
计算机可以直接执行的二进制代码(即:机器码),由 0 和 1 组成。每一个机器指令对应于特定的处理器操 ...
阅读全文
2021年5月11日
优化
一、二进制重排原理1、Page In 与 二进制重排在前面总结的冷启动流程中已经提到了 Page In,这里再简单补充下,在 iOS 中,内存管理主要由操作系统、CPU 协同完成:
操作系统负责分配物理内存,并更新存放物理内存、虚拟内存映射关系的页表。
位于 CPU 上的 MMU(内存管理 ...
阅读全文
2021年4月10日
优化
一、启动时长监控1、阶段划分一般而言,对于冷启动时长,一般是统计从用户点击图标到首屏展示出来这段时间的时长。这个过程可以粗粒度分为下面两个阶段进行统计:这里一般是使用 root viewController 的 viewDidAppear 时间作为首屏渲染完成时间,也就是 APP 首屏加载完 ...
阅读全文
2021年4月2日
优化
iOS 的冷启动流程可用下图表示:接下来,详细介绍 APP 启动流程中的各个阶段:
一、exec()iOS 操作环境的操作系统部分是 Darwin,Darwin 是一种类 Unix 操作系统,其内核是 XNU,XNU 是一个宏内核 BSD 与微内核 Mach 混合内核。
在 iOS 中,用户 ...
阅读全文