深拷貝,淺拷貝,自定義的類的物件實現拷貝

2021-07-22 11:44:52 字數 851 閱讀 5726

原來物件型別

拷貝方法

產生的副本物件型別

是否產生了新的物件

拷貝型別

描述nsstring

copy

nsstring

沒有淺拷貝

因為原來物件不可變,產生的副本也不可變,就沒有必要新申請一塊記憶體去浪費資源,源物件和副本物件就公用一塊記憶體

nsstring

nsmutablecopy

nsmutablestring

是深拷貝

源物件和副本的型別都不相同,所以自然會產生新的物件

nsmutablestring

copy

nsstring

是深拷貝

源物件和副本的型別不相同,自然會產生新的物件

nsmutablestring

nsmutablecopy

nsmutablestring

是深拷貝

雖然源物件和副本物件的內型別相同,但是產生的是可變副本,要是指向同一塊記憶體,那麼不就會影響源物件的內容嗎,所以還是要產生新的物件滴

對於自定義的類實現copy

reason: '-[person copywithzone:]: unrecognized selector sent to instance 0x7f863952bce0'
這樣的崩潰,所以如下所示

person *p = [[[self class]allocwithzone:zone]init];

/*將self.name賦值給新建立的物件的name*/

p.name = self.name;

return p;

}

ios深拷貝,淺拷貝,拷貝自定義物件的簡單介紹

copy語法的目的 改變副本的時候,不會影響到源物件 深拷貝 內容拷貝,會產生新的物件。新物件計數器置為1,源物件計數器不變。淺拷貝 指標拷貝,不會產生新的物件。源物件計數器 1。拷貝有下面兩個方法實現拷貝 id copy id mutablecopy 要實現copy,必須實現協議 陣列,字典,字串...

ios深拷貝,淺拷貝,拷貝自定義物件的簡單介紹

copy語法的目的 改變副本的時候,不會影響到源物件 深拷貝 內容拷貝,會產生新的物件。新物件計數器置為1,源物件計數器不變。淺拷貝 指標拷貝,不會產生新的物件。源物件計數器 1。拷貝有下面兩個方法實現拷貝 objc view plain copy id copy id mutablecopy 要實...

物件的淺拷貝和深拷貝

淺拷貝 1.用for迴圈獲取引用物件的屬性和值,賦值給新物件 object.prototype.num 1 person1 function clone origin,target for var key in origin return tar var person2 clone person1 ...