(ios开发中的@property)属性赋值,深浅拷贝



例如
  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的内容 ---- 深拷贝

如下图:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值