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);