知识卡片
值类型与引用类型的本质区别
内容
结构体、枚举等值类型在数据传递(赋值、作为参数传入)时总是被整体复制一份,修改新实例 不会影响原实例;类是引用类型,传递的只是同一份数据的引用,修改任意一处都会影响所有持有 该引用的地方。判断两个值类型实例是否相等要用”==“比较内容,判断两个引用是否指向同一个 实例要用”===“比较身份。Swift 把这条分界线推得比多数语言更彻底:[[三种集合类型的选择依据|Array/Set/Dictionary]] 和 String 在 Swift 中都用结构体实现,因此传递时语义上总是”复制”,这与 Objective-C 里 NSArray 等作为引用类型的集合完全不同。发散:官方文档特意说明底层会做写时复制优化以避免 真实复制的性能代价,这提示”值语义”是语言在 API 层面许下的承诺,不代表编译器真的会笨拙 地逐字节拷贝。
参考来源
《Swift 4从零到精通iOS开发》第7章《类与结构体》