//对象为可变字符串时
NSMutableString * string = [NSMutableString string];
[string appendString:@"1"];
[string appendString:@"2"];
//深拷贝
NSString * str1 = [string copy];//开辟新的内存 产生不可变对象类型
//深拷贝
NSMutableString * str2 = [string mutableCopy];//开辟新的内存 产生可变对象类型
//对象为不可变字符串时
NSString * string = @"sb";
//浅拷贝
NSString * str1 = [string copy];//指针指向原来的内存地址 没有新开辟内存空间
//深拷贝
NSMutableString * str2 = [string mutableCopy];//开辟新的内存 为可变类型
实现拷贝的语法
- copy
- 只会产生不可变的副本(比如NSString)
- 浅拷贝是拷贝指针地址 - mutableCopy
- 只会产生可变的副本(比如NSMutableString)
- 深拷贝是拷贝内容 重新开辟新的内存空间
以此类推NSArray和NSMutaleArray也是一样的原理
注意:此方法只针对系统的copy如果是自定义的对象要NSCopying要遵守协议
并实现下面方法
- (id)copyWithZone:(NSZone *)zone
{
Person * p = [[Person allocWithZone:zone ]init ];
//在这里可以赋值
p.age = self.age;
return p ;
}
@property中的copy
当赋值对象为可变字符串时
为strong时 外面穿什么值 里面就赋什么值 当赋值对象为可变的时候值会随着外面的值变化而变化
为copy时对象是不可变的 当赋值对象为可变的时候里面的对象是不会随着外面的值变化而变得
总结:
Paste_Image.png