Swift面试题更新 2026-08-05

在 Swift 开发中,class 和 struct 分别适用于哪些场景?请从值类型与引用类型的本质差异出发,说明它们的内存管理方式有何不同,并给出在实际项目中如何根据需求选择使用 class 或 struct 的判断依据。

技术原理方案权衡Swift

考察说明

考查对 Swift 核心类型系统(值类型与引用类型)的理解,以及在实际开发中如何结合场景做出合理选择。

回答思路

  1. 【回答框架 1】class 是引用类型,赋值或传递时复制引用,多个变量可指向同一实例,实例间修改会相互影响;struct 是值类型,赋值或传递时进行值拷贝,每个实例独立,修改互不影响。
  2. 【回答框架 2】内存管理上,class 使用引用计数(ARC)自动管理,可能产生循环引用,需使用 weak 或 unowned 打破;struct 按值传递,通常分配在栈上,由系统自动管理,无引用计数开销,但在嵌套或复制较大时会涉及栈与堆的分配。
  3. 【回答框架 3】选择依据:当需要继承、使用 Objective-C 互操作、共享可变状态或需要身份标识(如 == 比较引用)时选 class;当关注性能、不可变性、无继承需求、结构简单或作为模型层可复制数据时优先选 struct。Swift 标准库大量使用 struct,如 String、Array、Dictionary。
  4. 【回答框架 4】实际项目中,常将数据模型设计为 struct,将管理器、服务或需要共享状态的对象设计为 class;也可通过协议和泛型实现 struct 的行为抽象,以兼顾灵活与安全。
  5. 【回答框架 5】如果涉及集合或传递频繁,struct 的拷贝可能带来开销,需考虑使用写时复制(如 Array 内部实现)来优化;对于大对象且需共享,建议用 class。
  6. 【关键点 1】class 是引用类型,struct 是值类型。
  7. 【关键点 2】class 使用引用计数管理内存,struct 通过值拷贝传递。
  8. 【关键点 3】选择时考虑继承需求、身份标识、共享状态,以及性能和不可变性要求。