谁能告诉我NSArray的作业和副本之间的区别?

时间:2013-01-18 14:07:34

标签: ios objective-c

1.Assignment

NSArray* a = xxxxxx;

NSArray* b;

b = a;

2.复印

NSArray* a = xxxxxx;

NSArray* b;

b = [a copy];

我知道副本是“轻复制”,可变副本是“深拷贝”。

copy是复制内存地址,可变副本是复制内存对象。

但我不知道作业和副本的不同。

它是一样的吗?

2 个答案:

答案 0 :(得分:2)

This Apple文档很有帮助:

  

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

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

答案 1 :(得分:0)

b = a; b指向a点所在的同一地址。所以改变任何一个都是一样的。这被称为call by reference

b = [a copy];正在创建a的另一个对象,并由b指向。这里形成两组不同的对象,因此改变任何一个对象将彼此独立。这就像call by value。此处b将保留a的immutableCopy,即使a是可变的。