簡單理解NSString用Strong還是Copy

Strong,Copy都可以用來修飾NSString,Strong使NSString引用計數(shù)加1,NSString內(nèi)存地址不改變;Copy使NSString的引用計數(shù)不改變,重新開辟空間拷貝一份,內(nèi)存地址改變。如果不想屬性被修改用Copy,保證原始數(shù)據(jù)的準確性

用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重新開辟一塊內(nèi)存,拷貝一份,內(nèi)存地址改變,所以修改stringName的值,name_Copy值不會改變。

Copy值: -----(null)--0x7fb41b403408
Copy賦值后: -----張三--0x7fb41b403408
 Copy屬性stringName值改變后: -----張三--0x7fb41b403408
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容