當前位置:成語大全網 - 新華字典 - 深拷貝、淺拷貝的理解與使用場景

深拷貝、淺拷貝的理解與使用場景

通俗解釋:深拷貝是內容拷貝,淺拷貝是地址拷貝

區別點:

深拷貝會創建壹個新的內存空間,拷貝的值是壹樣的,但是內存地址不壹樣。

淺拷貝只是拷貝指向原來對象的地址,使原對象的引用計數+1

像NSString、NSNumber這些不能包含其他對象的叫做非容器類對象

像NSArray、NSDictionary這些可以包含其他對象的叫容器類對象

打印結果如下:

通過對比不難發現:

上面我們使用的是不可變的NSString,下面我們再使用可變的NSMutableString對比壹下:

打印結果如下:

不難發現,對於NSMutableString, 無論是copy還是mutableCopy都會創建壹個新對象,屬於深拷貝

打印結果如下:

不難發現,copy是淺拷貝,mutableCopy是深拷貝,不過需要註意的是容器對象的成員元素都指向相同的地址

打印結果如下:

對比可見,容器對象與非容器對象類似,可變對象的復制都是深拷貝,不可變對象copy是淺拷貝,mutableCopy是深拷貝

需要註意的是對容器而言,元素對象始終是指針復制

正如前面所說,容器對象中的元素對象無論是copy還是mutableCopy都是指針復制,如何實現容器對象的完全深拷貝呢?

系統為我們實現容器對象的完全深拷貝提供了方法