看過一些NSString建議用copy和strong修飾的文章,很多時(shí)候的解釋都是講深拷貝揖膜,淺拷貝的問題妒峦,然后就是如下結(jié)論:一般我們將對象聲明為NSString時(shí)悠砚,都不希望它改變蚂维,所以大多數(shù)情況下篱竭,我們建議用copy,以免因可變字符串的修改導(dǎo)致的一些非預(yù)期問題役首。一直沒有特別理解是怎么回事尝丐,閑來無事自己動手寫了一個(gè)demo來模擬一些需求來驗(yàn)證上述內(nèi)容。
屏幕快照 2018-01-31 下午5.40.53.png
先創(chuàng)建一個(gè)Person類衡奥,分別用Copy和String修飾兩個(gè)屬性爹袁。
屏幕快照 2018-01-31 下午5.44.49.png
分別賦值和打印地址如下結(jié)果
屏幕快照 2018-01-31 下午5.44.59.png
我們發(fā)現(xiàn)secondName并沒有copy出新對象,跟用strong修飾沒有任務(wù)區(qū)別矮固,都是所謂的淺拷貝失息,然后我又試了個(gè)用可變字符串去賦值,中途又修改的可變字符串档址。
屏幕快照 2018-01-31 下午5.41.35.png
打印結(jié)果如下:
屏幕快照 2018-01-31 下午5.41.44.png
效果就出來了根时。用copy修飾的屬性copy了一個(gè)新的對象,而strong沒有辰晕,結(jié)果也顯而易見,也應(yīng)證了結(jié)論:一般我們將對象聲明為NSString時(shí)确虱,都不希望它改變含友,所以大多數(shù)情況下,我們建議用copy校辩,以免因可變字符串的修改導(dǎo)致的一些非預(yù)期問題窘问。