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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章