KRISKEE'S BLOG[GO]

copy与mutableCopy的陷阱

  copy与mutableCopy都是深拷贝*方法,但在使用过程中会有陷阱,因为使用copy拷贝的对象,实际指向的是一个不可变对象;而是用mutableCopy拷贝的,实际上是一个可变对象。

  *(深拷贝:对对象内容进行复制,修改原对象对本对象无影响;浅拷贝:对对象指针进行复制,修改源对象,本对象会更改)

  

  (1.)如下,这一段代码,虽然array2被声明为一个NSMutableArray(可变数组),但使用了copy方法进行拷贝,所以实际上array2所指向的是一个可变数组;虽然通过NSMutabArray声明过后可以调用removeObjectAtIndex:方法,但因实际上是不可变数组在调用,所以运行结果会奔溃报错

1 NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
2 NSMutableArray *array2 = [array copy];
3 [array2 removeObjectAtIndex:0];
4 NSLog(@"%@", array2);

  

  (2.)如下,在这一段代码中,我做了修改,使array2声明为一个不可变数组,即无法再调用removeObjectAtIndex:方法,但array2使用mutableCopy进行复制,使得array2最终所指向的是一个可变数组。

1 NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
2 NSArray *array2 = [array mutableCopy];
3 // [array2 removeObjectAtIndex:0];
4 NSLog(@"%@", array2);

  

posted @ 2016-04-06 15:54  Kriskee  阅读(227)  评论(0编辑  收藏  举报