深拷贝,浅拷贝

来源:互联网 发布:淘宝怎样粘贴 编辑:程序博客网 时间:2024/05/22 02:21

浅 复 制:在复制操作时,对于被复制的对象的每一层复制都是指针复制, 内存并没有开辟新的空间, 使用浅拷贝会使原对象RefrenceCount加1。
深 复 制:在复制操作时,将对象完整的复制一份放到一个新的内存空间, 原对象的RC不会加1, 新对象的RC加1。
完全复制:在复制操作时,对于被复制的对象的每一层复制都是对象复制。

retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy:对于可变对象为深复制,引用计数不改变;
对于不可变对象是浅复制,引用计数每次加一。始终返回一个不可变对象。
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。

不可变对象:值发生改变,其内存首地址随之改变。

可变对象:无论值是否改变,其内存首地址都不随之改变。

引用计数:为了让使用者清楚的知道,该对象有多少个拥有者(即有多少个指针指向同一内存地址)。

1. 向一个可变对象copy和mutableCopy, 永远都是深copy2. 向一个不可变对象使用copy是浅拷贝, mutableCopy是深copy
  • 问 :什么时候用到深浅拷贝?

答:深拷贝是在要将一个对象从可变(不可变)转为不可变(可变)或者将一个对象内容克隆一份时用到;

 浅拷贝是在要复制一个对象的指针时用到。
0 0