码迷,mamicode.com
首页 > 其他好文 > 详细

一文让你深入了解copy

时间:2016-08-15 19:00:34      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

   首先问一个问题,为什么NSString要用copy修饰,用strong修饰不行么?好下边我们来看几个例子,如果还不明白,那么请你在看一遍,如果还是不明白,那么请你找块砖头,往头上拍一下你就明白了,不信你试试!

  先模拟一个错误的场景,一个person类,有一个用strong修饰的属性叫 s_name,并且之前的复制变量还想重复使用到其他场景,我们创建一个ViewController的对象VC并持有person类对象person;并执行下边test1方法.

   ‘-(void)test1{

      self.person = [[Person alloc]init];

      NSMutableString *name = [NSMutableString stringWithFormat:@"IOS"];

      self.person.s_name = name;

      NSLog(@"%@",self.person.s_name);

      [name appendingString:@" Swift"];

      NSlog(@"%@",self.person.s_name);

  }

‘  输出结果:

‘2016-08-12 05:51:21.262 TestCopy[64714:20449045] iOS

2016-08-12 05:51:21.262 TestCopy[64714:20449045] iOS Swift‘

发现我们仅仅对name做了修改,为什么s_name也会改变,好下边我们对代码稍作修改

 -(void)test2{

      self.person = [[Person alloc]init];

      NSMutableString *name = [NSMutableString stringWithFormat:@"IOS"];

      self.person.s_name = name;

      NSLog(@"%@",self.person.s_name);

      name = @"IOS Swift";

      NSlog(@"%@",self.person.s_name);

  }

 输出结果:

2016-08-12 05:56:57.162 TestCopy[64842:20459179] iOS

2016-08-12 05:56:57.162 TestCopy[64842:20459179] iOS

在做一个实验,我么用一个copy修饰的c_name 代替s_name

- (void)test3 {

    self.one = [[Person alloc] init];

    NSMutableString *name = [NSMutableString stringWithFormat:@"iOS"];

    self.one.c_name = name;

 

    NSLog(@"%@", self.one.c_name);

 

    [name appendString:@" Source Probe"];

 

    NSLog(@"%@", self.one.c_name);

}

 输出结果:

2016-08-12 06:03:40.226 TestCopy[64922:20479646] iOS

2016-08-12 06:03:40.227 TestCopy[64922:20479646] iOS

现在知道为什么要用copy了吧,也就是在一个特定场景下:我们通过一个NSMutableString对String变量进行复制,如果string的property为strong修饰时,就会随着NSMutableString类型的变量一起变化!!(未完待续!!)

一文让你深入了解copy

标签:

原文地址:http://www.cnblogs.com/lizhishuai/p/5773807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!