例如
NSMutableString *str = [NSMutableString stringWithString:@"你好"];
ViewController *vc = [ViewController new];
(1)
vc
.name = str; ---- 浅拷贝
NSLog(@"%@", vc
.name); --- 你好
[str appendString:@"ios"];
NSLog(@"%@", vc.name); --- 你好ios
这里出现vc.name改变的原因就是: 属性name是strong(默认)类型的,vc.name = str; 这行代码赋值后, 实际上只是name强指向了str, 所以当str的内容改变的时候, vc.name也改变了.如下图
(2) str = [NSMutableString stringWithString:@"ios"];//改变str的值
NSLog(@"%@", vc.name); ---你好
但是这样的赋值, 直接改变str之后并不会影响原来的str的指针指向的内容, 所以vc.name仍然指向原来的str, 因此内容并未改变
如果将(1)上面的 vc.name = str; 改为 vc.name = [str mutableCopy]; 那么将上面的两种操作都不会影响vc.name ---- 深拷贝
如下图:
(3)如果name被修饰为copy
@property (nonatomic, copy) NSString *name;
那么上面的操作都不会改变vc.name的内容 ---- 深拷贝
如下图: