深复制与浅复制
- copy复制后的对象是不可变的,mutableCopy复制后的对象是可变的。与原始对象是否可变无关。
- 对不可变对象进行copy是浅复制,mutableCopy是深复制。
- 对可变对象进行copy和mutableCopy都是深复制。
对不可变对象进行copy和mutableCopy示例:
对可变对象进行copy和mutableCopy示例:
针对容器类对象的深复制与浅复制
对容器对象本身的地址来说:
- 对不可变容器对象进行copy是浅复制,mutableCopy是深复制。
- 对可变对象进行copy和mutableCopy都是深复制。
对容器对象内元素的地址来说:
容器内对象浅复制: 方法: copy,mutableCopy,initWithArray: withItems:NO, (当数组中对象为不可变对象时)initWithArray:withItems:YES
容器内对象深复制: 方法: 归档,(数组中对向为可变对象)initWithArray: withItems:YES (如容器内对象也是容器对象,则子类容器对象是使用init方法是浅复制。使用归档方法是完全的深复制)