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