值类型
每个实例都有自己唯一的数据,不会因为其他实例的改变而改变。值类型的赋值都是深复制的。
值类型包括结构体、枚举、元组。
引用类型
引用对象的实例共享他们的数据。引用类型的赋值都是指向同一块内存地址。
引用类型包括类。
主要区别
当实例的值不会改变时,值类型和引用类型是一样的。
当实例的值可能发生改变时,需要注意。
可以通过copy对象来防止引用值的改变。
多线程时,引用类型会变得危险。
使用场景
值类型:判断数据相等、使用多线程
引用类型:判断对象相等、创建一个共享的对象
⚠️Array、String、Dictionary虽然是对象,但是做了隐式copy处理,每个实例都有自己的数据,是线程安全的。