1. 程式人生 > >Swift 中如何理解copy-on-write

Swift 中如何理解copy-on-write

當值型別(如struct)在複製時,複製的物件和元、原物件實際上在記憶體中指向同一個物件。當且僅當修改複製後的物件時,才會在記憶體中重新建立一個新的物件。舉例:

//arrayA是一個數組,為值型別

let arrayA = [1,2,3]

//arrayB這個時候與arrayA在記憶體中是同一個陣列,記憶體中並沒有生成新的陣列

let arrayB = arrayA

//arrayB被修改了,此時arrayB在記憶體中變成了一個新的陣列,而不是原來的arrayA

arrayB.append(4)

從上面的程式碼可以看出,賦值的陣列和原陣列共享同一個地址,直到其中之一發生改變。這樣設計使得值型別可以被多次複製而無需耗費多餘的記憶體,只有變化的時候才會增加開銷。因此記憶體的使用更加高效