iOS 开发面试 50 个高频易混淆知识点详解
目录
一、Swift 语言基础与进阶(1-10)
1. let与var的本质区别(不是 "常量 / 变量" 这么简单)
2. struct与class的核心区别(面试必问)
3. ==与===的区别
4. optional(可选型)的本质与!、?的使用
5. guard与if的使用场景区别
6. enum的高级用法(关联值、原始值、递归枚举)
7. protocol的class-only限制与AnyObject
8. extension的使用限制与能力
9. throws、try、do-catch错误处理机制
10. inout参数的工作原理
二、内存管理(11-18)
11. ARC 的工作原理与自动引用计数
12. 强引用(strong)、弱引用(weak)、无主引用(unowned)的区别
13. 循环引用的产生原因与解决方法
14. autoreleasepool的作用与使用场景
15. deinit的调用时机与限制
16. 值类型的内存管理与 Copy-On-Write
17. Core Foundation 对象的内存管理(__bridge、__bridge_retained、__bridge_transfer)
18. 内存泄漏的检测方法
三、多线程与 GCD(19-27)
19. 进程与线程的区别
20. 串行队列与并发队列的区别
21. 同步(sync)与异步(async)的区别
22. 主队列与全局队列的区别
23. DispatchGroup的使用方法与场景
24. DispatchSemaphore的使用方法与场景
25. DispatchBarrier的使用方法与场景
26. OperationQueue与 GCD 的区别
27. 线程安全的实现方法
四、UIKit 与界面开发(28-36)
28. frame与bounds的区别
29. UIView的生命周期方法
30. UIViewController的生命周期方法
31. UIButton的addTarget与closure的区别
32. UITableView的重用机制
33. Auto Layout与Frame布局的区别
34. UIStackView的使用方法与优势
35. CALayer与UIView的区别
36. 离屏渲染的产生原因与优化方法
五、数据持久化(37-41)
37. UserDefaults的使用限制与最佳实践
38. Keychain的使用方法与优势
39. Core Data与SQLite的区别
40. FMDB的使用方法与优势
41. 数据持久化方案对比
六、网络编程(42-45)
42. URLSession的使用方法与优势
43. GET与POST请求的区别
44. HTTP 状态码的含义
45. 网络请求的缓存策略
七、设计模式(46-50)
46. 单例模式的实现与优缺点
47. 代理模式的实现与优缺点
48. 观察者模式的实现与优缺点
49. MVC 与 MVVM 的区别
50. 工厂模式的实现与优缺点
