問(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,如下圖所示:

這兩個(gè)array的屬性是不同的,為了看出這二者的區(qū)別,我們看一下實(shí)現(xiàn)代碼以及運(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í),例如這樣:

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

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