(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也改变了.如下图


(ios开发中的@property)属性赋值,深浅拷贝_第1张图片





(2) str = [NSMutableString stringWithString:@"ios"];//改变str的值
  NSLog(@"%@", vc.name); ---你好
  但是这样的赋值, 直接改变str之后并不会影响原来的str的指针指向的内容, 所以vc.name仍然指向原来的str, 因此内容并未改变
  如果将(1)上面的  vc.name = str; 改为 vc.name = [str mutableCopy]; 那么将上面的两种操作都不会影响vc.name ---- 深拷贝
如下图:

(ios开发中的@property)属性赋值,深浅拷贝_第2张图片



(ios开发中的@property)属性赋值,深浅拷贝_第3张图片



(3)如果name被修饰为copy
  @property (nonatomic, copy) NSString *name;
  那么上面的操作都不会改变vc.name的内容 ---- 深拷贝

如下图:
(ios开发中的@property)属性赋值,深浅拷贝_第4张图片



你可能感兴趣的:(ios开发属性定义)