copy/strong 浅拷贝与深拷贝 注意修改数组内数据时造成的数据污染

1、为什么NSString 用copy

strong和retain同义, weak和assign同义, 为什么要采用这种说法, 似乎是ARC出现后为了消除引用计数的观念而采用的做法. 至于为什么要用copy, 由于纯NSString是只读的, 所以strong和copy的结果一样,据stackOverflow上的说法,是为了防止mutable string被无意中修改, NSMutableString是NSString的子类, 因此NSString指针可以持有NSMutableString对象.

2、copy的浅拷贝与深拷贝

copy/strong 浅拷贝与深拷贝 注意修改数组内数据时造成的数据污染_第1张图片

3、strong 修改数组中指向同一地址的数据造成的数据污染

@property (strong, nonatomic) MerchantConfigListModel *configListModel;

[cellArray addObjectsFromArray:self.configListModel.Order];

if (self.configListModel.Order.count) {

//这里一定要用copy,不然会污染别处组数里self.configListModel.Order[0]指针的内容。

MerchantConfigListFirstModel *firstModelLastest = [self.configListModel.Order[0] copy];

firstModelLastest.Name = [CashCouponServer changeMerchantLatestToCouponLatest:firstModelLastest.Name];

[cellArray removeObjectAtIndex:0];

[cellArray insertObject:firstModelLastest atIndex:0];

}

你可能感兴趣的:(copy/strong 浅拷贝与深拷贝 注意修改数组内数据时造成的数据污染)