知识卡片

字符串是值类型而非引用类型

专业/工作 · 711

内容

字符串、结构体、枚举在 Swift 里都是值类型:赋值给新变量或传给函数时,拿到的是一份独立副本,修改副本不会影响原值,这和 Objective-C/Java 里字符串常作为引用传递、需要小心是否被意外共享修改的心智模型不同。为了避免”值类型=每次都真复制一份”带来的性能损失,编译器只在真正发生写操作时才触发实际复制(写时复制),读取和只传递不修改的场景仍然共享底层存储。发散:这把”数据安全”(谁都不能悄悄改到我的数据)和”性能”这两个通常互斥的目标同时保住了,是值类型语言在工程实现上的一个通用套路,Rust 的 Cow、Python 的字符串驻留也是同一思路的变体。

参考来源

《Swift全解析:新式iOS实战开发》第4章《Swift字符串和字符》