為什么NSString的屬性一般使用copy

當(dāng)屬性類型為NSString *時,我們經(jīng)常使用copy來保護(hù)其封裝性。那么為什么這么做呢,我的習(xí)慣就是上代碼,因?yàn)槲矣X得代碼能夠說明一切。O(∩_∩)O哈哈~

廢話不說,我們看代碼:

//聲明一個字符串str1
@property (nonatomic, strong) NSString *str1;  //這里是strong


//1.我們新創(chuàng)建一個可變字符串str2
NSMutableString *str2 = [NSMutableString stringWithFormat:@"str2"];
//2.把str2值賦給self.str1
self.str1 = str2;
//3.然后我們改變str2的值
[str2 appendString:@"這是添加的"];

//打印結(jié)果
NSLog(@"str1=%@",self.str1);
NSLog(@"str2=%@",str2);

我們看下打印結(jié)果:

QQ20160613-0.png

str1居然隨著str2的改變而變化了?。?!

為什么會這樣?

因?yàn)槿绻O(shè)置成strong的話,str1setter實(shí)現(xiàn)是這樣的:

- (void)setStr1:(NSString *)str1 {
    _str1 = str1;
}

也就是說,str1str2兩個指針指向同一個對象,一個變化,就會引起另外一個的改變。

如果我們把屬性設(shè)置為copyseeter方法的實(shí)現(xiàn)就變成了下面的狀況:

- (void)setStr1:(NSString *)str1 {
    _str1 = [str1 copy];
}

然后我們再次打印結(jié)果:

copy.png

就正確了

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

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

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