OC 語言的深拷貝和淺拷貝的區別:有沒有產生新對象,即開辟新的內存。
深拷貝,產生新的對象,開辟新的內存空間
淺拷貝,不產生新的對象,不開辟新的內存空間,只是把指針指向原來對象的內存地址。
拷貝的目的是產生兩個互不影響的對象,所以:
1、對不可變對象來說,由于對象本身不可以進行修改,即不能對它產生影響。所以不可變對象的 copy 都是淺拷貝。
2、不可變對象的 mutableCopy 是深拷貝。
3、可變對象的 copy 是深拷貝。
4、可變對象的 mutableCopy 是深拷貝。
對于容器對象,也完全遵守上面的情況,只不過發生深拷貝時對容器對象本身來說是深拷貝,因為產生了新對象,而對容器內的元素來說是淺拷貝。即:修改容器內的元素,無論是原來對象還是拷貝產生的新對象,兩個容器內的元素都會發生變化,因為容器內存的是容器元素的內存地址。如果想讓容器對象本身及容器內的元素都發生深拷貝,使用歸檔。先歸檔,再解檔。