------- Java培训、Android培训、iOS培训、.Net培训 、期待与您交流 --------
一 copy和 mutableCopy定义
1>.copy
1.copy:就是复制或拷贝,是一个产生副本的过程。是一个浅复制,没有新的对象产生。copy创建的是不可变副本
2.copy对象拷贝的目的:要使用某个对象的数据,但是在修改对象的时候不影响原来的对象内容。
3.copy特点:修改原文件的内容,不会影响副本文件。修改源对象的属性和行为,不会影响副本对象。修改副本文件的内容,不会影响原文件。修改副本 对象的属性和行为,不会影响原对象。
4.copy作用:利用一个原文件产生一个副本文件。
5.copy前提:需要遵守NSCopying的协议,实现copyWithZone:方法。
2>mutableCopy
1.mutableCopy:是一个深复制,有新的对象产生,会新分配一块存储空间。mutableCopy创建的是可变副本。
2.mutableCopy前提:需要遵守NSMutableCopying的协议,实现mutablecopyWithZone:方法。
二 NSStringCopy在iOS项目下代码的演示
NSString *str=@"abc";//创建了一个不可变的字符串
// NSMutableString *str2=[str copy];//错误,copy的是不可变的
// [str2 appendString:@"xxxxx"];//把"xxxxx"添加到str里面
//NSLog(@"%@",str2);
NSString *str3=[str copy];
NSLog(@"%ld",str3.length);
//不可变的对象用MutableString,产生的是可变的对象。
NSMutableString *str4=[str mutableCopy];//此时str4是str的一个副本,str里面的内容不会变
[str4 appendString:@"xxxxx"];
NSLog(@"%@,%@",str4,str);//结果是abcxxxxx
//用可变对象copy,产生不可变的
NSMutableString *a=[NSMutableString string];
[a appendString:@"abc"];
// NSMutableString *a1=[a copy];
// [a1 appendString:@"xxxx"];
// NSLog(@"%@",a1);//打印结果报错,证明了用可变对象copy,产生不可变的
//用可变对象mutablecopy,产生可变的
NSMutableString *a2=[a mutableCopy];
[a2 appendString:@"xxxx"];
NSLog(@"%@",a2);//打印结果abcxxxx,证明了用可变对象mutablecopy,产生可变的
}