Swift中class与struct区别

编 号 比较项 struct class
1 类型 值类型 引用类型
2 属性初始化 可用默认构造直接初始化 需要自己创建构造方法,除非所属性都有默认值。
3 变量赋值 深拷贝 浅拷贝,增加原对象引用
4 类型方法 支持类型方法,但是不能继承自其它结构体或类 支持类型方法,并且可以作为基类被其它类继续
5 方法中修改属性 需要添加mutating关键字 不需要
6 继承关系 不能继承 可以继承
7 内存 通常在栈上,自动内存管理 在堆上,手动内存管理
8 执行速度 通常更高效 相对效率低
9 线程安全 值类型通常是线程安全的 引用类型大多是非线程安全的
10 与OC混编 不支持,OC无法调用struct 支持,可以通过继承NSObject实现
11 序列化 不直接支持,但可以通过编码为字节后转换为NSData 支持,可以通过NSCoding协议实现序列化
1.类型

struct是值类型,每次赋值或传递时都会创建一个新的副本; class是引用类型,赋值或传递的是对同一实例的引用。

2.属性初始化

struct有默认的成员逐一构造器,不需要手动编写; class则需要定义构造器,除非所有属性都有默认值。

3.变量赋值

struct在赋值时进行深拷贝;class在赋值时仅复制引用,引用计数加1,即浅拷贝。

4.类型方法

struct和class都支持类型方法,但是struct不能继承自其它结构体或类class 可以作为基类被其它类继续

5.方法中修改属性

struct的方法如果想要修改实例的属性,需要使用mutating关键字;
class的方法可以直接修改属性。

6.继承关系

struct不支持继承,不能从一个struct继承另一个struct或class;class可以继承另一个class的特性。

7.内存

struct通常存储在栈上,其内存由Swift的自动引用计数(ARC)管理;
class存储在堆上,也需要ARC来管理内存。

8.执行速度

struct因为通常存储在栈上并且是值类型,所以在处理时可能更快;class因为涉及到堆内存的管理和引用计数,可能相对较慢。

9.线程安全

由于struct是值类型,每个线程都有自己独立的副本,因此通常是线程安全的; class是引用类型,多个线程可能访问同一实例,因此需要额外的同步机制来保证线程安全。

10.与OC混编

Swift的struct不能被Objective-C直接调用,而class可以通过继承NSObject与Objective-C代码混编。

11.序列化

Swift的struct本身不支持序列化,但可以通过转换为字节流后存储;
class可以通过实现NSCoding协议支持序列化。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容