IOS學習之淺析深拷貝與淺拷貝

weixin_33924312發表於2018-05-27

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


2887690-d5dc6aaf3c18b6cf.png
不可變_不可變.png
2887690-bfb899e4d473e98a.png
不可變_可變.png

結論:

不可變物件 copy 生成不可變物件,拷貝方式為淺拷貝,執行mutablecopy生成可變物件,拷貝方式為深拷貝。

2887690-ea044cab00b9e6aa.png
可變_不可變.png
2887690-fc34888809979ec8.png
可變_可變.png

結論:

可變物件 copy 生成不可變物件,拷貝方式為深拷貝,執行mutablecopy生成可變物件,拷貝方式為深拷貝。

補充:

如何令自己所寫的物件具有拷貝功能?
·如果想讓自己的類具備copy方法,並返回不可變型別,必須遵循NSCoping協議,並且實現 -(id)copyWithZone:(NSZone *)zone 方法。
·如果想讓自己的類具備mutableCopy方法,並返回可變型別,必須遵循NSMutableCoping協議,並且實現 -(id)mutableCopyWithZone:(NSZone *)zone 方法。

寫在最後:

  1. NSArray與NSMutableArray,
  2. NSDictionary與NSMutableDictionary
    它們的拷貝方式和 NSString 與NSMutableString的類似,可參考上面的。

相關文章