IOS學習之淺析深拷貝與淺拷貝
a. 淺拷貝,不生成新物件(只拷貝指標,內容依舊是原物件指標所指向內容)
b. 深拷貝,生成新的物件(生成新的指標地址,拷貝指標指向內容)

不可變_不可變.png

不可變_可變.png
結論:
不可變物件 copy 生成不可變物件,拷貝方式為淺拷貝,執行mutablecopy生成可變物件,拷貝方式為深拷貝。

可變_不可變.png

可變_可變.png
結論:
可變物件 copy 生成不可變物件,拷貝方式為深拷貝,執行mutablecopy生成可變物件,拷貝方式為深拷貝。
補充:
如何令自己所寫的物件具有拷貝功能?
·如果想讓自己的類具備copy方法,並返回不可變型別,必須遵循NSCoping協議,並且實現-(id)copyWithZone:(NSZone *)zone
方法。
·如果想讓自己的類具備mutableCopy方法,並返回可變型別,必須遵循NSMutableCoping協議,並且實現-(id)mutableCopyWithZone:(NSZone *)zone
方法。
寫在最後:
- NSArray與NSMutableArray,
- NSDictionary與NSMutableDictionary
它們的拷貝方式和 NSString 與NSMutableString的類似,可參考上面的。
相關文章
- ios 深淺拷貝學習iOS
- iOS深拷貝和淺拷貝iOS
- React之淺拷貝與深拷貝React
- 淺拷貝與深拷貝
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- 深入淺出深拷貝與淺拷貝
- Python淺拷貝與深拷貝Python
- JS深拷貝與淺拷貝JS
- python深拷貝與淺拷貝Python
- 淺拷貝&深拷貝
- Python3之淺談----深拷貝與淺拷貝Python
- 淺析賦值、淺拷貝、深拷貝的區別賦值
- 深入淺出的“深拷貝與淺拷貝”
- JavaScript之深拷貝和淺拷貝JavaScript
- js之淺拷貝和深拷貝JS
- 談談深拷貝與淺拷貝
- 賦值、淺拷貝與深拷貝賦值
- 深拷貝、淺拷貝與Cloneable介面
- 淺拷貝和深拷貝
- 深拷貝和淺拷貝
- 淺探js深拷貝和淺拷貝JS
- 淺拷貝與深拷貝的實現
- 【JavaScript】物件的淺拷貝與深拷貝JavaScript物件
- 圖解 Python 淺拷貝與深拷貝圖解Python
- JavaScript中的淺拷貝與深拷貝JavaScript
- 淺拷貝與深拷貝程式碼(javascript)JavaScript
- ES6深拷貝與淺拷貝
- Java深拷貝和淺拷貝Java
- 物件深拷貝和淺拷貝物件
- JavaScript深拷貝和淺拷貝JavaScript
- javascript 淺拷貝VS深拷貝JavaScript
- js 淺拷貝和深拷貝JS
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- python 指標拷貝,淺拷貝和深拷貝Python指標
- python學習筆記–深拷貝與淺拷貝的區別Python筆記