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);
复制代码 |
|