iOS 深拷貝 淺拷貝

深拷貝 淺拷貝

淺拷貝

淺拷貝並非拷貝對象自己,而是對指向對象的指針進行拷貝,但仍是指向同一塊堆內存中指針指向的對象
複製代碼

淺拷貝.png

能夠看出淺拷貝中棧內存中指針對象的地址改變了,但仍是指向相同的一塊堆內存地址
複製代碼

深拷貝

直接拷貝對象到內存中的一塊區域,而後把新對象的指針指向這塊內存。
複製代碼

深拷貝.png

能夠看出深拷貝是直接拷貝對象到內存中的一塊區域(分配了一塊新的內存空間),而後把新對象的指針指向這塊內存,原對象和被賦值對象互不影響。
複製代碼

深拷貝與淺拷貝的本質區別

在因而否在堆內存中開闢新的內存空間。
複製代碼

區分深拷貝與淺拷貝

主要從 容器類和 非容器 類着手,無論是容器類仍是非容器類都有可變對象和不可變對象,因此分爲四種:markdown

  • 非容器類不可變對象:NSString
  • 非容器類可變對象:NSMutableString
  • 容器類不可變對象:NSArray
  • 容器類可變對象:NSMutableArray

結論

[object copy]:對於可變對象爲深拷貝,不可變對象爲淺拷貝。
[object mutableCopy]:始終都是深拷貝。
複製代碼
相關文章
相關標籤/搜索