iOS中深拷貝、淺拷貝和retain的區別


淺拷貝:淺拷貝是對object對象的指針拷貝,讓指針指向同一塊內存地址,“對象永遠只有一個",淺拷貝使對象的引用計數器+1。代碼如下:

可以看出不可變字符串的指針指向了同一地址,並沒有重新開辟內存。

深拷貝:深拷貝是對object對象的復制,保留原對象的值,開辟新的內存地址。

如圖中代碼,聲明一個可變數組,為WXDObject類添加一個用copy修飾的屬性,在類的實現后將指針指向可變數組,打印兩者的地址發現地址發生了變化。所以用copy修飾可變對象,將會進行深拷貝。

retain修飾:將上面array的修飾改為retain,對象引用計數器+1,指向同一地址,並沒有重新開辟內存地址。

總結:

  retain:引用計數器+1,指向同一地址。結果和淺拷貝一樣,僅僅是使得對象的引用計數器自增1.

  copy:對不可變對象等同與retain,指針拷貝,引用計數器+1。對可變對象執行深拷貝,等同mutableCopy,內容拷貝。

      mutableCopy:深拷貝是重新創一個新對象,但是卻保留原來對象的值。內容拷貝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM