swift将String、Array、Dictionary设计成了值类型。
值类型相对于引用类型的优势:
1.高效地使用内存,因为它是在栈上操作的
2.线程安全
值类型
值类型被复制的时机是值类型的内容发生改变(copy on write)
func test(_ arr: [Int]) {
for i in arr { print(i) }
}
var a = [1,2,3]
var b = a
let c = b test(a)
上面的代码没有发生复制,因为值类型a的内容没有改变。
var a = [1,2,3]
var b = a
b.append(5) // 此时 a 和 b 的内存地址不再相同
上面的代码发生了复制,因为值类型b的内容发生了改变。
(联想:copy对不可变字符串的修饰,如果字符串内容不变是浅拷贝,如果发生了变化是深拷贝)
引用类型
类就是一种引用类型,将赋值给一个新对象的时候,没有发生copy,而是多了一个对原对象的引用。
网友评论