Strong,Copy都可以用來修飾NSString垢油,Strong使NSString引用計數(shù)加1,NSString內(nèi)存地址不改變圆丹;Copy使NSString的引用計數(shù)不改變滩愁,重新開辟空間拷貝一份,內(nèi)存地址改變辫封。如果不想屬性被修改用Copy硝枉,保證原始數(shù)據(jù)的準(zhǔn)確性
用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);
控制臺打印結(jié)果
分析打印結(jié)果,用Strong申明屬性后倦微,賦值時name_Strong指針指向stringName妻味,所以stringName改變導(dǎo)致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);
控制臺打印結(jié)果
分析打印結(jié)果欣福,用Copy屬性修飾责球,賦值時name_Copy重新開辟一塊內(nèi)存,拷貝一份拓劝,內(nèi)存地址改變雏逾,所以修改stringName的值,name_Copy值不會改變郑临。
Copy值: -----(null)--0x7fb41b403408
Copy賦值后: -----張三--0x7fb41b403408
Copy屬性stringName值改變后: -----張三--0x7fb41b403408