什么时候需要使用副本?

use*_*271 3 copy objective-c ios

我试着了解何时需要使用copy?我认为copy分配新内存,但事实并非如此.所以,例如:

NSArray *array = @[@"111", @"111"];
NSArray *array1 = array.copy;
NSMutableArray *array2 = array.copy;
NSMutableArray *array3 = array.mutableCopy;
NSArray *array4 = array.mutableCopy;
Run Code Online (Sandbox Code Playgroud)

仅为array3和array4分配的新内存.所以,我可以简单地为array1和array2做:

NSArray *array1 = array;
NSMutableArray *array2 = array;
Run Code Online (Sandbox Code Playgroud)

当我可以使用copy时,它只会生成不可变的array2,它对我有用吗?

das*_*ght 8

在Cocoa中,该copy方法可以非常智能:如果一个对象是不可变的,它可以在不进行复制的情况下自行返回,因为复制无法更改的对象没有意义.在您的示例中,NSArray是不可变的,并且NSMutableArray是可变的.这就是为什么只有可变对象进行实际复制的原因.当然,所有可变副本也必须分配新内存.