1.Assignment
NSArray* a = xxxxxx;
NSArray* b;
b = a;
2.复印
NSArray* a = xxxxxx;
NSArray* b;
b = [a copy];
我知道副本是“轻复制”,可变副本是“深拷贝”。
copy是复制内存地址,可变副本是复制内存对象。
但我不知道作业和副本的不同。
它是一样的吗?
答案 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
是可变的。