深复制与浅复制

深复制与浅复制

  • copy复制后的对象是不可变的,mutableCopy复制后的对象是可变的。与原始对象是否可变无关。
  • 对不可变对象进行copy是浅复制,mutableCopy是深复制。
  • 对可变对象进行copy和mutableCopy都是深复制。

对不可变对象进行copy和mutableCopy示例:

深复制与浅复制_第1张图片
屏幕快照 2017-12-01 上午7.18.44.png
屏幕快照 2017-12-01 上午7.18.52.png

对可变对象进行copy和mutableCopy示例:

深复制与浅复制_第2张图片
屏幕快照 2017-12-01 上午7.13.03.png
屏幕快照 2017-12-01 上午7.13.10.png

针对容器类对象的深复制与浅复制

对容器对象本身的地址来说:

  • 对不可变容器对象进行copy是浅复制,mutableCopy是深复制。
  • 对可变对象进行copy和mutableCopy都是深复制。
深复制与浅复制_第3张图片
屏幕快照 2017-12-01 上午10.14.26.png
深复制与浅复制_第4张图片
屏幕快照 2017-12-01 上午10.14.39.png

对容器对象内元素的地址来说:

  • 容器内对象浅复制: 方法: copy,mutableCopy,initWithArray: withItems:NO, (当数组中对象为不可变对象时)initWithArray:withItems:YES

  • 容器内对象深复制: 方法: 归档,(数组中对向为可变对象)initWithArray: withItems:YES (如容器内对象也是容器对象,则子类容器对象是使用init方法是浅复制。使用归档方法是完全的深复制)

深复制与浅复制_第5张图片
屏幕快照 2017-12-01 上午11.00.12.png
深复制与浅复制_第6张图片
屏幕快照 2017-12-01 上午11.00.31.png

你可能感兴趣的:(深复制与浅复制)