copy、mutablecopy
copy:不管是可變的,還是不可變的,結果都是不可變的
mutablecopy:不管是不可變的,還是可變的,結果都是可變的
nsmutablestring*str = [nsmutablestring
stringwithformat
:@"a"];
nsarray *arr1 = @[str,@"b"
];nsarray *arr2 = [arr1 copy];
[str setstring:@"c"];
nslog(@"%@",arr2);
//自定義的類需要實現copy的話,需要遵守協議nscopying
@inte***ce
useritem : nsobject
@property(nonatomic,retain)
nsmutablestring
*name;
@end
@implementationuseritem
//系統沒事呼叫alloc,就相當於呼叫了allocwithzone
//系統每次呼叫copy的話,就相當於呼叫了copywithzone
-(id)copywithzone:(nszone *)zone
//深拷貝
-(id)mutablecopywithzone:(nszone *)zone
@end
useritem *user = [[useritem
alloc] init];
user.name = [nsmutablestring
stringwithformat:@"
潘松彪"];
// useritem *user2 = [user copy]; //淺拷貝
// [user.name setstring:@"李力卓」];
useritem *user3 = [user mutablecopy]; //深拷貝
nslog(@"%@",user3.name);
深拷貝 淺拷貝
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
淺拷貝 深拷貝
retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...
深拷貝, 淺拷貝
nsstring copy 指標複製,返回的物件的位址和方法的接收者一樣,引用計數加1 nsmutablestring copy 深複製,重新alloc乙個 nsstring 的物件,並返回。返回物件的位址和方法接收者的位址不一樣,並且方法接受者的內容改變不影響返回物件,同時返回物件的內容不可以改變...