浅 复 制
:在复制操作时,对于被复制的对象的每一层复制都是指针复制, 内存并没有开辟新的空间, 使用浅拷贝会使原对象RefrenceCount加1。
深 复 制
:在复制操作时,将对象完整的复制一份放到一个新的内存空间, 原对象的RC不会加1, 新对象的RC加1。
完全复制
:在复制操作时,对于被复制的对象的每一层复制都是对象复制。
retain
:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy
:对于可变对象为深复制,引用计数不改变;
对于不可变对象是浅复制,引用计数每次加一。始终返回一个不可变对象。
mutableCopy
:始终是深复制,引用计数不改变。始终返回一个可变对象。
不可变对象
:值发生改变,其内存首地址随之改变。
可变对象
:无论值是否改变,其内存首地址都不随之改变。
引用计数
:为了让使用者清楚的知道,该对象有多少个拥有者(即有多少个指针指向同一内存地址)。
1. 向一个可变对象copy和mutableCopy, 永远都是深copy
2. 向一个不可变对象使用copy是浅拷贝, mutableCopy是深copy
- 问 :什么时候用到深浅拷贝?
答:深拷贝是在要将一个对象从可变(不可变)转为不可变(可变)或者将一个对象内容克隆一份时用到;
浅拷贝是在要复制一个对象的指针时用到。