Swift 面试题
目录

Swift 中类和结构体的区别是什么?

· 约 3 分钟读完 · 第 67 / 196 章

推荐答案

在 Swift 中,类和结构体都是用于定义自定义数据类型的重要工具,但它们之间有几个关键区别:

  1. 继承:类支持继承,允许一个类继承另一个类的属性和方法。结构体不支持继承。
  2. 类型:类是引用类型,而结构体是值类型。
  3. 内存管理:类的实例存储在堆上,使用引用计数进行内存管理。结构体的实例通常存储在栈上,内存管理更加高效。
  4. 可变性:类的实例属性可以在实例方法中被修改,即使实例是常量。结构体的实例属性在实例为常量时不能被修改。
  5. 初始化器:类可以有自定义的初始化器,而结构体会自动生成一个成员初始化器。

本题详细解读

1. 继承

类支持继承,这意味着你可以创建一个新类,继承自另一个类,并添加或重写属性和方法。例如:

结构体不支持继承,因此你不能从一个结构体派生出另一个结构体。

2. 类型

类是引用类型,这意味着当你将一个类的实例赋值给另一个变量时,两个变量实际上引用的是同一个实例。例如:

结构体是值类型,赋值时会创建一个新的副本。例如:

3. 内存管理

类的实例存储在堆上,使用引用计数进行内存管理。这意味着当没有任何变量引用一个类的实例时,实例会被自动释放。

结构体的实例通常存储在栈上,内存管理更加高效,因为栈上的内存分配和释放速度更快。

4. 可变性

类的实例属性可以在实例方法中被修改,即使实例是常量。例如:

结构体的实例属性在实例为常量时不能被修改。例如:

5. 初始化器

类可以有自定义的初始化器,而结构体会自动生成一个成员初始化器。例如:

在这个例子中,MyClass需要显式定义初始化器,而MyStruct会自动生成一个成员初始化器。