开篇
在Swift中,有两种传值方式:引用类型(Class)和值类型(Struct/Enum)。而值类型有一个copy的操作,它的意思是当你传递一个值类型的变量的时候(给一个变量赋值,或者函数中的参数传值),它会拷贝一份新的值让你进行传递。你会得到拥有相同内容的两个变量,分别指向两块内存。
这样的话,在你频繁操作占用内存比较大的变量的时候就会带来严重的性能问题,Swift也意识到了这个问题,所以推出了Copy-on-Write机制,用来提升性能。下面我们来说一下什么是Copy-on-Write。
什么是Copy-on-Write
当你有一个占用内存很大的一个值类型,并且不得不将它赋值给另一个变量或者当做函数的参数传递的时候,拷贝它的值是一个非常消耗内存的操作,因为你不得不拷贝它所有的东西放置在另一块内存中。
为了优化这个问题,Swift对于一些特定的值类型(集合类型:Array、Dictionary、Set)做了一些优化,在对于Array进行拷贝的时候,当传递的值进行改变的时候才会发生真正的拷贝。而对于String、Int等值类型,在赋值的时候就会发生拷贝。下面来看代码验证一下:
先看一下基本类型(Int、String等)
var num1 = 10
var num2 = num1
print(address(of: &num1)) //0x7ffee0c29828
print