解釋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:];
// 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的時候,就是真正的深拷貝。