Swift中class、struct的异同
2020-01-21 本文已影响0人
悄然林静
class是引用类型,struct是值类型。
- 值类型在传递和赋值时将进行复制,而引用类型仅使用引用对象的指针。
- 值类型保存在内存的栈区域,引用类型保存在堆区域。
堆操作比栈操作更加复杂、耗时,所以苹果官方推荐使用结构体以提高App的运行效率。
class的独有功能
- class可以继承,子类可以使用父类的特性和方法。
- 类型转换可以在runtime的时候检查和解释一个实例的类型。
- 类可以用deinit来释放资源。
- 一个类可以被多次引用。
struct的优势
- 结构较小,适用于复制操作
- 相比于一个class的实例被多次引用更加安全。
- 无需担心内存泄漏、多线程冲突
补充:关于引用类型和值类型
变量的本质是一个内存地址的别名。
区别:
- 值类型:变量对应的内存地址的内容当做数值。
值类型保存在内存栈区域,由系统自动释放资源。 - 引用类型:变量对应的内存地址的内容当做内存地址,再去取改地址的内容。
引用类型保存在内存堆区域,常见的有类、接口、委托和装箱值类型reference type。
引用规则:
- 引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
- 不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
- 一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)
参考文章: