码迷,mamicode.com
首页 > 其他好文 > 详细

copy和mutableCopy详解

时间:2015-12-25 15:00:37      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

非容器对象:

 

NSString

NSMutableString

不可变对象复制:

copy是指针复制(浅拷贝);

mutableCopy就是对象复制(深拷贝)。

可变对象复制:

都是深拷贝,但是copy返回的对象是不可变的。

copy

浅copy,不会产生新的地址,两个指针指向同一地址

深copy,会产生新的地址,两个指针指向不同地址,并且copy 出来的对象是不可变的。

mutableCopy

深copy,会产生新的地址,两个指针指向不同地址

深copy,会产生新的地址,两个指针指向不同地址

 

 

系统容器对象:

 

NSArray

NSMutableArray

不可变对象复制:

copy是指针复制(浅拷贝);

mutableCopy就是对象复制(深拷贝)。

可变对象复制:

都是深拷贝,但是copy返回的对象是不可变的

对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝。

copy

浅copy,不会产生新的地址,两个指针指向同一地址

深copy,会产生新的地址,两个指针指向不同地址,并且copy 出来的对象是不可变的。

mutableCopy

深copy,会产生新的地址,两个指针指向不同地址

深copy,会产生新的地址,两个指针指向不同地址

 

 

 

总结:

 

immutableObject

mutableObject

copy

浅copy

深copy

mutableCopy

深copy

深copy

集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制

 

NSMutableArray *mArray=[NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c", nil];

NSArray *array1=[mArray copy];
NSMutableArray *mArray1=[mArray copy];
//[mArray1 addObject:@"sss"]; 这一步会出错,因为mutableObject copy返回的对象是不可变的。

NSArray *array2=[mArray mutableCopy];
NSMutableArray *mArray2=[mArray mutableCopy];

NSMutableString *testString = [mArray2 objectAtIndex:0];
[testString appendString:@"new"];//这样以上三个数组的首元素都被改变了

 

copy和mutableCopy详解

标签:

原文地址:http://www.cnblogs.com/zhangleixy/p/5075771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!