性能优化

iOS 性能优化面试题 - 启动/卡顿/耗电/崩溃/包瘦身/死锁

July 6, 2026

架构设计

iOS 架构设计面试题

July 6, 2026

源码分析

iOS 第三方库源码分析

July 6, 2026

编译工程

iOS 编译优化面试题

July 6, 2026

设计原则

设计原则面试题

July 6, 2026

设计模式

设计模式面试题

July 6, 2026

设计模式与原则

设计模式与原则合集

July 6, 2026

跨平台

跨平台开发面试题

July 6, 2026

面试专题

系统化的iOS和AI面试知识库,涵盖基础到进阶的完整知识体系! iOS 相关面试题 App 启动与优化 Q: APP启动的详细流程是什么? iOS 应用启动分为冷启动、热启动和预热启动三种类型。冷启动是最完整的流程,分为 Pre-main 阶段 和 main 阶段。 Pre-main 阶段: Pre-main 阶段由 dyld(动态链接器)负责,从用户点击 App 图标到 main() 执行之前。主线程在内核 fork() 创建进程时同时创建,后续所有 Pre-main 工作都在主线程上执行。 加载可执行文件:内核创建进程,使用 mmap() 将 Mach-O 文件映射到虚拟内存(惰性加载,只有实际访问的页才加载到物理内存)。解析 Mach-O Header(验证 Magic Number、CPU 架构匹配、文件类型识别)和 Load Commands(LC_SEGMENT_64 映射内存并设置权限、LC_LOAD_DYLIB 记录动态库依赖、LC_MAIN 计算入口地址等),最后验证代码签名。 加载动态库(dyld):dyld 从主程序 Mach-O 的 LC_LOAD_DYLIB 中读取依赖的动态库路径,按搜索规则查找动态库实际位置(优先从共享缓存中查找),使用 mmap() 映射到进程虚拟地址空间,验证代码签名,然后使用深度优先搜索递归加载每个动态库的依赖(每个库只加载一次)。最终按依赖关系构建初始化顺序——被依赖的库先于依赖方(如 Foundation 在 UIKit 之前)。如果 App 使用 Swift,此阶段还会加载 Swift 标准库(iOS 12.2+ 位于系统共享缓存,无需嵌入 App)。 Rebase & Bind:由于 ASLR(地址空间布局随机化),App 每次启动的加载地址不同,需要修正指针。Rebase(重定位)修正指向 Mach-O 内部的指针,将编译时地址加上 ASLR 偏移量(slide);Bind(绑定)修正指向 Mach-O 外部的指针,查找符号表绑定到正确的外部符号地址(如 _objc_msgSend)。 ...

July 6, 2026

OC 源码分析

objc4 runtime reading guide objc4 技术文章索引 这组单页文档围绕 Objective-C runtime 的主干路径展开:从 dyld 加载镜像、类实现化、消息发送和方法缓存, 一直到引用计数、weak、autorelease、关联对象、Protocol、KVC/KVO 与底层哈希容器。 17篇单页讲解 4推荐阅读阶段 **runtime/**主要源码目录 **test/**行为验证入口 推荐阅读路径 如果是第一次系统阅读 objc4,按下面顺序看最容易把机制串起来。 1 先看类如何进入 runtime 理解 dyld、read_images、realize 和 methodize。 2 再看一次消息如何执行 从 objc_msgSend 快速路径走到慢速查找。 3 补上方法缓存细节 看清 cache_t、bucket_t、扩容和 flush。 4 最后进入对象生命周期 串起 isa、inline retain count、SideTable 和 dealloc。 Runtime 主干机制 这些文章解释对象、类、方法、选择子和协议如何被 runtime 组织起来。 load 类加载、read_images 与类实现化 从 dyld 映射镜像到 readClass、future class、realizeClass、methodizeClass。 阅读文档 message objc_msgSend 与慢速查找入口 解释 arm64 快速路径、nil/tagged pointer、cache miss、lookUpImpOrForward 和 forwarding。 阅读文档 cache 方法缓存 cache_t / bucket_t 讲清方法缓存的查找、插入、扩容、flush 以及 preoptimized cache。 ...

June 2, 2026