3

1.Assignment

NSArray* a = xxxxxx;

NSArray* b;

b = a;

2.Copy

NSArray* a = xxxxxx;

NSArray* b;

b = [a copy];

I know copy is "light copy",mutable copy is "deep copy".

copy is copy memory address,and mutable copy is copy memory objects.

But i don't know assignment and copy's different.

It's the same?

4

2 回答 2

2

这个Apple 文档很有帮助:

普通副本是一个浅拷贝,它产生一个与原始集合共享对象所有权的新集合。深层副本从原始对象创建新对象并将其添加到新集合中。

因此,在您的第一个示例中,b指向与 .NSArray 相同的实例a。在第二个示例中,b指向 NSArray 的新实例,其中包含对 指向的数组中包含的相同对象的引用a

于 2013-01-18T14:15:52.090 回答
0

b = a; b是指向同一个地址a。所以改变任何一个都是一样的。这叫做像call by reference

b = [a copy];正在创建 的a和 指向的另一个对象b。这里形成了两组不同的对象,因此更改其中任何一个都将相互独立。这就像call by value. 这里b将保存一个 immutableCopy a,即使它a是可变的。

于 2013-01-18T14:20:50.407 回答