1.Assignment
NSArray* a = xxxxxx;
NSArray* b;
b = a;2.Copy
NSArray* a = xxxxxx;
NSArray* b;
b = [a copy];我知道拷贝是“轻拷贝”,可变拷贝是“深拷贝”。
copy是复制内存地址,可变copy是复制内存对象。
但我不知道分配和复制是不同的。
是一样的吗?
发布于 2013-01-18 22:15:52
This Apple文档很有帮助:
普通副本是一个浅层副本,它生成一个新的集合,该集合与原始对象共享对象的所有权。深度副本从原始对象创建新对象,并将这些对象添加到新集合中。
因此,在第一个示例中,b指向与a相同的NSArray实例。在第二个示例中,b指向一个新的NSArray实例,该实例包含对a所指向的数组中包含的相同对象的引用。
发布于 2013-01-18 22:20:50
b = a; b指向的地址与a指向的地址相同。因此,更改其中任何一个都是相同的。这就是所谓的call by reference。
b = [a copy];正在创建b所指向的a的另一个对象。这里形成了两组不同的对象,因此更改其中任何一组对象都是相互独立的。这就像call by value一样。在这里,b将持有a的immutableCopy,即使a是可变的。
https://stackoverflow.com/questions/14400612
复制相似问题