使用NSArray時(shí),到底用strong修飾還是copy修飾
iOS開發(fā)人員都知道剖笙,使用NSMutableArray時(shí)是用strong修飾,例如:
@property?(nonatomic,strong)?NSMutableArray?*?mutableArray; ?
那么,NSArray呢?好像很多人都直接使用strong载绿,而且網(wǎng)上還有很多人說除了NSString用copy,其他對(duì)象類型都用strong油航。
問題來了:當(dāng)用strong修飾NSArray的時(shí)候,如果遇到用可變數(shù)組給它賦值怎么辦怀浆?會(huì)導(dǎo)致不易察覺的問題谊囚,看下面代碼:
//-------聲明兩個(gè)屬性 ?
@property?(nonatomic,strong)?NSMutableArray?*?mutableArray; ?
@property?(nonatomic,strong)?NSArray?*?array;?
//------執(zhí)行如下代碼 ?
self.mutableArray?=?[NSMutableArrayarray]; ?
[self.mutableArrayaddObject:@"1"];??
self.array?=?[NSArrayarray]; ?
self.array?=self.mutableArray; ?
NSLog(@"array---%@",self.array); ?
[self.mutableArrayaddObject:@"2"]; ?
NSLog(@"array---%@",self.array);??
//------運(yùn)行結(jié)果
array---(
? ? 1
)
array---(
? ? 1,
? ? 2
)
也就是說,self.array在沒有被直接操作的情況下执赡,跟著self.mutableArray?變化了镰踏,這是很危險(xiǎn)的。
如果沙合,把a(bǔ)rray用copy修飾奠伪,也就是
@property?(nonatomic,?copy)?NSArray?* array;
運(yùn)行結(jié)果會(huì)如下:
array---(
? ? 1
)
?array---(
? ? 1
)
這次self.array不會(huì)跟隨self.mutableArray?變化了。
綜上:在可能遇到可變數(shù)組給不可變數(shù)組直接賦值的情況下首懈,使用copy修飾不可變數(shù)組绊率。
我一直使用copy修飾不可變數(shù)組,目前還未出現(xiàn)過問題究履。
用strong的話 會(huì)指向原來的對(duì)象滤否。copy的話是一個(gè)新的對(duì)象。