解釋Array拷貝區別
copy返回不可變對象,mutablecopy返回可變對象
注意:容器內的元素內容都是指針複製。
1. 不可變數組copy
NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
NSArray *arrayCopy = [array copy];
//arrayCopy是和array同一個NSArray對象(指向相同的對象),包括array裏面的元素也是指向相同的指針
拷貝生成的對象指針相同,數組對象中的元素指針也是相同的
2. 不可變數組mutableCopy
NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
NSMutableArray *mArrayCopy = [array mutableCopy];
[mArrayCopy addObject:@"de"];
[mArrayCopy removeObjectAtIndex:0];
// mArrayCopy是array的可變副本,指向的對象和array不同,但是其中的元素和array中的元素指向的是同一個對象。mArrayCopy還可以修改自己的對象
array和arrayCopy是指針複製,而mArrayCopy是對象複製,mArrayCopy還可以改變期內的元素:刪除或添加。
拷貝生成的對象指針不同,數組對象中的元素指針也是相同的
3. 可變數組copy(同2)
4. 可變數組mutableCopy(同2)
真正的深拷貝
//
- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag
//falg爲YES的時候,底層會使用copyWithZone:方法爲每個array元素生成一個副本,並把新生成的副本數組返回
falg爲YES的時候,就是真正的深拷貝。