天天看點

解釋Array拷貝差別

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

繼續閱讀