可以看出,指向不可變字符串的指針指向同壹個地址,並且不會重新打開內存。
深層副本:深層副本是對象的副本,它保留原始對象的值,並打開壹個新的內存地址。
如圖中代碼所示,聲明壹個變量數組,給WXDObject類添加壹個用copy修飾的屬性,類實現後將指針指向變量數組,打印兩者的地址,發現地址發生了變化。因此,如果妳用copy來修飾壹個可變對象,妳將會做壹個深度拷貝。
Retain decoration:將上述數組的裝飾改為Retain,對象引用counter+1指向同壹個地址,無需重新打開內存地址。
總結:
Retain:引用counter+1,指向同壹個地址。結果和淺拷貝壹樣,只是對象的引用計數器增加了1。
Copy:對於不可變對象,等價於retain,指針復制和引用計數器+1。對可變對象進行深度復制,相當於可變復制和內容復制。
MutableCopy: Deep copy是重新創建壹個新對象,但保留原對象的值。內容副本。