跳到主要内容

iOS 面经

核心考点

1. 内存管理 (ARC)

  • ARC(Automatic Reference Counting):编译器自动插入 retain/release
  • 强引用循环:两个对象互相强引用导致无法释放
  • 解决:使用 weak(不增加引用计数,置 nil)或 unowned(不置 nil,对象必须比引用者活得长)
  • 闭包捕获列表[weak self][unowned self] 避免循环

2. RunLoop

  • 事件循环机制,有任务则处理,无任务则休眠
  • Mode:主线程 RunLoop 有 Default、UITrackingRunLoopMode、Common Modes
  • 应用场景:Timer、常驻线程、滚动期间暂停图片加载

3. 多线程

方式特点
GCD轻量,推荐,任务+队列模型
OperationQueue面向对象,支持依赖关系和取消
Thread底层,需手动管理
  • 串行队列:任务顺序执行;并发队列:任务并发执行
  • 主队列(串行):UI 操作必须在主线程
  • 死锁:主线程同步派发任务到主队列

4. Swift 特性

  • Optional:显式处理 nil,? 可选链,! 强解包,guard let / if let 安全解包
  • Protocol + Extension:面向协议编程,替代继承实现代码复用
  • Value Types vs Reference Types:struct/enum 是值类型(栈),class 是引用类型(堆)
  • Codable:自动序列化/反序列化 JSON
  • async/await:Swift 5.5 引入,结构化并发

5. UIKit vs SwiftUI

对比UIKitSwiftUI
范式命令式声明式
最低支持iOS 2+iOS 13+
生态成熟完整快速发展
调试较复杂Preview 实时预览

6. 高频面试题

  • Category vs Extension:Category 运行时添加方法(不能加存储属性);Extension 编译期扩展(可加存储属性,仅限当前模块)
  • KVO / KVC:键值观察/编码,底层通过 isa-swizzling 实现
  • App 生命周期:Not Running → Inactive → Active → Background → Suspended
  • Instruments 性能分析:Time Profiler(CPU)、Allocations(内存)、Leaks
  • Autolayout 原理:Cassowary 约束求解算法