黑马程序员技术交流社区
标题:
copy的概念及入门
[打印本页]
作者:
956251361
时间:
2016-1-2 12:15
标题:
copy的概念及入门
1.什么是copy
copy的字面意思就是复制,拷贝,是一个产生副本的过程
对象拷贝的目的:要使用某个对象的数据,但是在修改对象的时候不影响原来对象的内容.
常见的赋值有用一个源文件产生:文件赋值
作用:一个副本文件
2.copy的特点
修改源文件的内容,不会影响副本文件
修改副本文件的内容,不会影响源文件
OC中的copy,就是值的对象的拷贝
作用:利用源对象产生一个副本对象
3.如何使用copy功能
一个对象调用copy或mutableCopy方法创建一个副本对象
如果源对象是不可变的,那么copy的副本对象也是不可变的
如果源对象是可变的,那么mutableCopy的副本对象就是可变对象
4.使用copy功能的前提
copy:需要遵守NSCopy协议,实现copyWithZone方法
mutableCopy:需要遵守NSMutableCopying协议,实现mutableCopyWithZone方法
copy就是浅复制,因为没有产生新的对象(有没有产生新的对象也是判断深浅复制的标准)
此处copy产生的副本是不可变的
mutableCopy就是深复制,会在内存中重新分配一块内存空间
//创建一个字符串对象
NSString *str = @"abc";
NSLog(@"str = %@,addr = %p",str,str);
//不可变的对象 copy 产生的副本对象 也是不可变的
NSString *str2 = [str copy];
NSLog(@"%ld",str2.length);
//不可变的对象 mutableCopy 产生的副本对象是可变的
NSMutableString *str3 = [str mutableCopy];
//在str3中添加字符xxxx
[str3 appendString:@"xxxx"];
NSLog(@"%@,%@",str3,str);
//可变对象 copy 产生的副本不可变
//可变对象 mutableCopy 产生的副本是可变的
NSMutableString *str = [NSMutableString string];
[str appendString:@"abc"];
NSMutableString *str2 = [str mutableCopy];
[str2 appendString:@"abc"];
NSLog(@"str2 = %@",str2);
复制代码
作者:
yfh349958021
时间:
2016-1-2 15:34
分析的很透彻,感谢楼主
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2