strong與copy

問(wèn)題:在聲明一個(gè)變量時(shí),什么時(shí)候用strong,什么時(shí)候用copy。


@property使用方法:@property(參數(shù)1,參數(shù)2)類型名字

@property的默認(rèn)屬性是nonatomic,readwrite,Strong,可是有些時(shí)候使用默認(rèn)屬性會(huì)crash,比如會(huì)產(chǎn)生循環(huán)引用等。

所以究竟什么時(shí)候使用Strong,什么時(shí)候用Copy呢?

舉個(gè)栗子

聲明一個(gè)NSArray,如下圖所示:

圖1 聲明array

這兩個(gè)array的屬性是不同的,為了看出這二者的區(qū)別,我們看一下實(shí)現(xiàn)代碼以及運(yùn)行效果,如下圖所示:

圖2 代碼實(shí)現(xiàn)
圖3 運(yùn)行效果圖

看到運(yùn)行效果,我們就可以很清楚的看到了二者的差別,那么為什么用strong和用copy是不一樣的呢?

原因

1.strong是強(qiáng)引用,將mulArr賦值給self.array1時(shí),self.array1對(duì)mulArr一直是持有強(qiáng)引用的狀態(tài),所以當(dāng)mulArr里面有新的變化時(shí),由strong修飾的self.array1也會(huì)隨之變化。

2.copy是拷貝,準(zhǔn)確來(lái)說(shuō)是深拷貝,將mulArr賦值給self.array2時(shí),self.array2直接就將mulArr里面的數(shù)組拷貝了一份,放在了self.array2里面,所以無(wú)論mulArr怎么變,都和self.array2無(wú)關(guān),自然self.array2不會(huì)變。

其他方法

假如用戶編程 的時(shí)候習(xí)慣了使用Strong屬性,而忘記了使用copy屬性時(shí),例如這樣:

圖4 聲明變量2

為了避免編程的時(shí)候出現(xiàn)錯(cuò)誤,我們可以在代碼實(shí)現(xiàn)的時(shí)候稍作改動(dòng),如下圖:

圖5 代碼實(shí)現(xiàn)2

這樣的話,代碼運(yùn)行的結(jié)果同樣也是正確的。

歡迎大家及時(shí)溝通交流



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

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

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