問題:在聲明一個變量時,什么時候用strong,什么時候用copy。
@property使用方法:@property(參數1,參數2)類型名字
@property的默認屬性是nonatomic,readwrite,Strong,可是有些時候使用默認屬性會crash,比如會產生循環引用等。
所以究竟什么時候使用Strong,什么時候用Copy呢?
舉個栗子
聲明一個NSArray,如下圖所示:
圖1 聲明array
這兩個array的屬性是不同的,為了看出這二者的區別,我們看一下實現代碼以及運行效果,如下圖所示:
圖2 代碼實現
圖3 運行效果圖
看到運行效果,我們就可以很清楚的看到了二者的差別,那么為什么用strong和用copy是不一樣的呢?
原因
1.strong是強引用,將mulArr賦值給self.array1時,self.array1對mulArr一直是持有強引用的狀態,所以當mulArr里面有新的變化時,由strong修飾的self.array1也會隨之變化。
2.copy是拷貝,準確來說是深拷貝,將mulArr賦值給self.array2時,self.array2直接就將mulArr里面的數組拷貝了一份,放在了self.array2里面,所以無論mulArr怎么變,都和self.array2無關,自然self.array2不會變。
其他方法
假如用戶編程 的時候習慣了使用Strong屬性,而忘記了使用copy屬性時,例如這樣:
圖4 聲明變量2
為了避免編程的時候出現錯誤,我們可以在代碼實現的時候稍作改動,如下圖:
圖5 代碼實現2
這樣的話,代碼運行的結果同樣也是正確的。