原來物件型別
拷貝方法
產生的副本物件型別
是否產生了新的物件
拷貝型別
描述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 ...