用 @property 聲明的 NSString (或 NSArray,NSDictionary) 經(jīng)常使用 copy 關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問(wèn)題?

因?yàn)楦割愔羔樋梢灾赶蜃宇悓?duì)象,使用copy目的是為了讓本對(duì)象的屬性不受外界的影響,使用copy無(wú)論是給我傳入一個(gè)可變對(duì)象還是不可變對(duì)象,我本身持有的都是一個(gè)不可變的副本。 如果我們使用的是strong 的話,那么這個(gè)屬性如果指向一個(gè)可變對(duì)象,可變對(duì)象在外部被修改的時(shí)候,會(huì)影響本身的屬性。

copy 所表達(dá)的所屬關(guān)系與strong 類似,但是copy設(shè)置方法并不保留新值。當(dāng)屬性為NSString 時(shí),因?yàn)閭鬟f給設(shè)置方法的新值有可能指向一個(gè)NSMutableString 類的實(shí)例。這個(gè)類是 NSString 的子類,此時(shí)若是不拷貝字符串,那么設(shè)置完屬性之后,字符串的值就可能會(huì)在對(duì)象不知道的情況下被更改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容