性能优化
iOS 性能优化面试题 - 启动/卡顿/耗电/崩溃/包瘦身/死锁
iOS 性能优化面试题 - 启动/卡顿/耗电/崩溃/包瘦身/死锁
iOS 架构设计面试题
iOS 第三方库源码分析
iOS 编译优化面试题
设计原则面试题
设计模式面试题
设计模式与原则合集
跨平台开发面试题
系统化的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)。 ...
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。 ...