深拷貝, 淺拷貝

2021-07-30 03:35:05 字數 1114 閱讀 4515

[nsstring copy]               指標複製,返回的物件的位址和方法的接收者一樣,引用計數加1

[nsmutablestring copy]        深複製,重新alloc乙個 nsstring 的物件,並返回。返回物件的位址和方法接收者的位址不一樣,並且方法接受者的內容改變不影響返回物件,同時返回物件的內容不可以改變。

[nsstring mutablecopy]        深複製,重新alloc乙個nsmuatblestring,並返回。返回物件的位址和方法接收者的位址不一樣,2者的內容改變不影響另一者,同時返回物件的內容可以改變。

[nsmutablestring mutablecopy]  深複製,重新alloc乙個nsmuatblestring,並返回。返回物件的位址和方法接收者的位址不一樣,2者的內容改變不影響另一者,同時返回物件的內容可以改變。

[nsarray copy]         指標複製,返回的物件的位址和方法的接受者的位址一樣,引用計數加1,同時array裡面的物件的位址都是一樣的

[nsmutablearray copy]  「false深複製」 重新alloc乙個 nsarray物件,並返回,返回物件的位址和方法接收者的位址不一樣,並且方法接受者本身內容(曾、減等操作,非包含物件內容的變化)改變不影響返回物件,同時返回物件的內容不可以改變。同時array裡面的物件的位址都是一樣的。

[nsarray mutablecopy]          「false深複製」 重新alloc乙個nsmutablearray 並返回,返回物件的位址和方法接收者的位址不一樣,並且2者的本身物件的增加,刪除等操作不影響另一者。同時array裡面的物件的位址都是一樣的

[nsmutablearray mutablecopy]    同上。

總結:1:對於不可變物件,copy都是淺複製,即指標複製。mutablecopy 都是alloc乙個新物件返回。

2:對於可變物件,copy和mutablecopy都是alloc新物件返回。

3:不論是可變還是不可變物件,copy返回的物件都是不可變的,mutablecopy返回的物件都是可變的。

4:容器類物件,不論是可變的還是不可變的,copy,mutablecopy返回的物件裡所包含的物件的位址和之前都是一樣 的,即容器內物件都是淺拷貝。

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...