Objective-C路成魔【18-複製對象】

來源:互聯網
上載者:User

標籤:

郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。

假設文章對您有所協助,歡迎給作者捐贈,支援郝萌主,捐贈數額任意。重在心意^_^ 

我要捐贈: 點擊捐贈

Cocos2d-X原始碼下載:點我傳送


將一個變數賦值給還有一個對象只建立還有一個對這個對象的引用。

類似於Java中,賦值是一個引用。

參考C++或者C的指標來理解就easy了。這裡的賦值事實上就是指標地址賦值而已。


Foundation類實現了名為copy 和 mutableCopy的方法,能夠使用這些方法建立對象的副本。

通過實現一個符合<NSCopying>協議(用於製作副本)的方法來完畢此任務。


注意,產生一個對象的可變副本並不要求被複製的對象本身是可變的。相同,能夠建立可變對象的不可變副本。


淺複製和深複製:

mutableCopy方法複製數組時。在記憶體中為新的數組對象分配了空間。而且將單個元素拷貝到新數組中。

然後將原始數組中的每一個元素拷貝到新位置意味著:僅將引用從一個數組元素拷貝到還有一個數組元素。

這樣做的結果,就是兩個數組中的元素都指向記憶體中的同一個字串。

若要為數組中的每一個元素建立全然不同的副本,須要運行所謂的深複製。


實現<NSCopying>協議:

注意。假設想要區分可變副本和不可變副本。

還須要依據<NSMutableCoping>協議實現mutableCopyWithZone:方法。

假設兩個方法都實現。那麼copyWithZone:應該返回不可變副本。

而mutableCopyWithZone:將返回可變副本。


屬性並沒有mutableCopy特性。

即使是可變的執行個體變數。也它是用copy特性,作為該方法copyWithZone:經營業績。

所以。按照協議將產生一個對象的不變副本。

Objective-C路成魔【18-複製對象】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.