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年12月17日
底层
一、概述提到线程,不得不讲下 CPU,CPU 是计算机的“大脑”,负责着程序的执行和数据的处理。
现代 CPU 基本都是多核 CPU,这里的“核”是指 CPU 的物理核心,物理核心是真正的硬件单元,负责执行指令。物理核心在执行某些类型的指令(如内存访问)时,可能会发生等待,这时核心的其他执行 ...
阅读全文
2022年11月17日
底层
一、概述dispatch_async 是用于将任务异步提交到指定调度队列的函数。它允许调用者线程继续执行,而不必等待任务的完成。
dispatch_async 特点:
会开启新线程
dispatch_async 提交的任务不会阻塞调用者线程。调用者线程可以继续执行后续代码,而任务会被异步地 ...
阅读全文
2022年11月12日
底层
一、概述dispatch_sync 用于将一个任务同步地提交到指定的调度队列,并等待该任务完成后才返回。调用者线程会被阻塞,直到任务执行完毕。dispatch_sync 在需要确保任务在某个队列上按顺序执行,前一个任务完成之前,后续任务不会执行。
dispatch_sync 特点:
不会开 ...
阅读全文
2022年10月25日
底层
一、概述Grand Central Dispatch(GCD)是 iOS 中一个强大的多线程编程框架,GCD 提供了一种高效、低级别的方式来管理并发任务。
GCD 是使用队列来调度任务的执行的,GCD 队列主要有这几种:
队列(Queue)
串行队列:任务按顺序执行,一个任务完成后才开始下 ...
阅读全文
2022年10月15日
底层
一、概述单例在 iOS 中应用广泛,常用于管理全局的资源,如应用程序的配置信息、数据库管理、网络请求管理器等。dispatch_once 常被用来实现单例,如下是创建单例的一个最基本的用法:
123456789101112@implementation TestObject+ (instan ...
阅读全文
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 ...
阅读全文