copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象
例:
NSArray *array = @[@"test", @"test2"];
NSMutableArray *arrayMu = [array copy];// arrayMu实际上被赋值成一个 NSArray 对象,这是如果调用NSMutableArray特有的方法会crash,例如[arrayMu removeObject:@"test"];
NSMutableArray *arrayM = [array mutableCopy]; //此时arrayM被赋值的是一个NSMutalbeArray对象,这时调用NSMutableArray特有的方法不会出现问题
另一个常见问题:
@property (nonatomic, copy) NSMutalbeArray *array; 这样声明有什么问题?
array 被赋值时得到的其实是一个NSArray对象,调用NSMutableArray特有的方法时会crash
例如这样调用:
NSMutableArray *testArray = [NSMutableArray arrayWithObjects:@"test", @"test2"];
self.array = testArray;//这行代码实际上相当于_array = [testArray copy];得到的是NSArray对象