OC 語言的深拷貝和淺拷貝的區別

OC 語言的深拷貝和淺拷貝的區別:有沒有產生新對象,即開辟新的內存。

深拷貝,產生新的對象,開辟新的內存空間
淺拷貝,不產生新的對象,不開辟新的內存空間,只是把指針指向原來對象的內存地址。

拷貝的目的是產生兩個互不影響的對象,所以:

1、對不可變對象來說,由于對象本身不可以進行修改,即不能對它產生影響。所以不可變對象的 copy 都是淺拷貝。
2、不可變對象的 mutableCopy 是深拷貝。
3、可變對象的 copy 是深拷貝。
4、可變對象的 mutableCopy 是深拷貝。

對于容器對象,也完全遵守上面的情況,只不過發生深拷貝時對容器對象本身來說是深拷貝,因為產生了新對象,而對容器內的元素來說是淺拷貝。即:修改容器內的元素,無論是原來對象還是拷貝產生的新對象,兩個容器內的元素都會發生變化,因為容器內存的是容器元素的內存地址。如果想讓容器對象本身及容器內的元素都發生深拷貝,使用歸檔。先歸檔,再解檔。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容