1. 程式人生 > >iOS 深復制淺復制

iOS 深復制淺復制

mut 是否 ear bsp 存儲 測試 ios with nsobject

淺復制:復制的對象指向被復制對象的內存,並沒有開辟新內存
深復制:復制的對象開辟新內存,是一塊新的存儲空間。

對於深復制和淺復制具體的實現是在copyWithZone方法中確定的,不同的類會對這個方法有不同的實現。實現該方向需要遵守NSCopying、NSMutableCopying協議, 其中copy、mutableCopy方法是繼承自NSObject,但是NSObject類沒有遵守NSCopying協議,沒有實現copyWithZone方法
淺復制和深復制是針對Copy而言的,mutableCopy都是深復制。

copy復制完成之後,都是不可變的,無論被復制對象是否可變。 mutableCopy 賦值完成之後,是可變對象的,都是深復制,內部是可以添加數據的 (經過測試發現,對NSArray進行MutableCopy,實際創建的結果是深復制後的MutableArray類型,但是內部的對象默認是淺復制指向原來NSArray內部的對象地址,但是如果對內部對象做修改則會開辟新的內存,變為深復制而不會出現修改原來內存地址數據的問題) 淺復制:不可變對象 + Copy 深復制:可變對象 + Copy and mutableCopy 的所有情況

iOS 深復制淺復制