swift OC 深拷貝 淺拷貝

2021-07-23 04:45:08 字數 1366 閱讀 4066

nsmutablearray 的copy 和mutablecopy可以自己證明下。

總結:

* 1:對於不可變物件,copy都是淺複製,即指標複製。mutablecopy 都是記憶體複製,即深複製

* 2:對於可變物件,copy和mutablecopy一般是記憶體複製,即深複製

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

swift中的深拷貝 淺拷貝

import uikit

class person

func getinfo() ->

string

}var personal1 = person(name: "小明", age: 25)

var personal2 = personal1 //淺拷貝。。。

personal1.getinfo()//"小明的年齡是25"

personal2.getinfo()//"小明的年齡是25"

personal1.name =

"小王"

personal1.age =

10personal1.getinfo()//"小王的年齡是10"

personal2.getinfo()//"小王的年齡是10"

personal2.name =

"小黃"

personal2.age =

100personal1.getinfo()//"小黃的年齡是100"

personal2.getinfo()//"小黃的年齡是100"

import uikit

struct person

func getinfo() -> string

}var personal1 = person(name: "小明", age: 25)

var personal2 = personal1 // 深拷貝。。。

personal1.getinfo()//"小明的年齡是25"

personal2.getinfo()//"小明的年齡是25"

personal1.name = "小王"

personal1.age = 10

personal1.getinfo()//""小王的年齡是10

""personal2.getinfo()//"小明的年齡是25"

personal2.name = "小黃"

personal2.age = 100

personal1.getinfo()//"小王的年齡是10"

personal2.getinfo()//"小黃的年齡是100"

淺拷貝 深拷貝

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...