美文网首页iOS程序员
简单理解NSString用Strong还是Copy

简单理解NSString用Strong还是Copy

作者: 逾期的誓言 | 来源:发表于2017-11-15 14:45 被阅读18次

Strong,Copy都可以用来修饰NSString,Strong使NSString引用计数加1,NSString内存地址不改变;Copy使NSString的引用计数不改变,重新开辟空间拷贝一份,内存地址改变。如果不想属性被修改用Copy,保证原始数据的准确性

用Strong声明属性

/**
 Strong 声明属性
 */
@property (nonatomic,strong)NSString *name_Strong;
// 打印记录原始值
    NSLog(@"Strong值: -----%@--%p",self.name_Strong,&_name_Strong);

// 用NSMutableString给属性赋值
   NSMutableString *stringName = [NSMutableString stringWithFormat:@"张三"];
    self.name_Strong = stringName;

 // 打印记录赋值后值
    NSLog(@"Strong赋值后: -----%@--%p",self.name_Strong,&_name_Strong);

// 改变NSMutableString值
    [stringName appendString:@"丰"];
   
  // 打印记录stringName 值改变后变化
    NSLog(@"Strong属性stringName值改变后: -----%@--%p",self.name_Strong,&_name_Strong);

控制台打印结果

分析打印结果,用Strong申明属性后,赋值时name_Strong指针指向stringName,所以stringName改变导致name_Strong值也改变。

Strong值: -----(null)--0x7fb41b403400
Strong赋值后: -----张三--0x7fb41b403400
Strong属性stringName值改变后: -----张三丰--0x7fb41b403400

用Copy声明属性

/**
 copy声明属性
 */
@property (nonatomic,copy)NSString *name_Copy;
// 打印记录原始值
    NSLog(@"Copy值: -----%@--%p",self.name_Copy,&_name_Copy);

// 用NSMutableString给属性赋值
   NSMutableString *stringName = [NSMutableString stringWithFormat:@"张三"];
    self.name_Copy = stringName;

// 打印记录赋值后值
    NSLog(@"Copy赋值后: -----%@--%p",self.name_Copy,&_name_Copy);

// 改变NSMutableString值
    [stringName appendString:@"丰"];
 
// 打印记录stringName 值改变后变化
    NSLog(@"Copy属性stringName值改变后: -----%@--%p",self.name_Copy,&_name_Copy);

控制台打印结果

分析打印结果,用Copy属性修饰,赋值时name_Copy重新开辟一块内存,拷贝一份,内存地址改变,所以修改stringName的值,name_Copy值不会改变。

Copy值: -----(null)--0x7fb41b403408
Copy赋值后: -----张三--0x7fb41b403408
 Copy属性stringName值改变后: -----张三--0x7fb41b403408

相关文章

网友评论

本文标题:简单理解NSString用Strong还是Copy

本文链接:https://www.haomeiwen.com/subject/gtycvxtx.html