淺拷貝:淺拷貝並不拷貝對象本身,只是對指向對象的指針進行拷貝深拷貝:直接拷貝對象到記憶體中一塊區域,然後把新對象的指針指向這塊記憶體 在iOS中並不是所有對象都支持Copy和MutableCopy,遵循NSCopying協議的類可以發送Copy協議,遵循NSMutableCopying協議的類可以發送M ...
淺拷貝:淺拷貝並不拷貝對象本身,只是對指向對象的指針進行拷貝
深拷貝:直接拷貝對象到記憶體中一塊區域,然後把新對象的指針指向這塊記憶體
在iOS中並不是所有對象都支持Copy和MutableCopy,遵循NSCopying協議的類可以發送Copy協議,遵循NSMutableCopying協議的類可以發送MutableCopy消息。如果一個對象沒有遵循這兩個協議而發送Copy或者MutableCopy消息那麼會發生異常。如果要遵循NSCopying協議,那麼必須實現copyWithZone方法。如果要遵循NSMutableCopying協議那麼必須實現mutableCopyWithZone方法
1.非容器對象(NSString)
不可變對象調用Copy方法其實只是把當前對象的指針指向了原對象的地址,而調用mutableCopy方法則是新分配了一塊記憶體區域並把新對象的指針指向了這塊區域。 可變對象來說調用Copy和MutableCopy方法都會重新分配一塊記憶體。但是copy和mutableCopy的區別在於copy在複製對象的時候其實是返回了一個不可變對象,因此當調用方法改變對象的時候會崩潰 2.容器類對象(NSArray) 容器對象本身和非容器對象是同樣的效果,但是容器里的元素還是指針複製。