淺談深淺拷貝

在進(jìn)行iOS開發(fā)時候,深拷貝很多人不經(jīng)常用,但是有時候出了bug,追查很久,才發(fā)現(xiàn)是深淺拷貝的問題,往往浪費很多時間。

場景:

假設(shè)在即時通訊發(fā)消息,下載東西時候,對文件進(jìn)行model定義后,多層傳參。在某一層方法的時候,這個model改變了里面的值比如isDownload=YES;然后最外層方法還需要isDownload原來的狀態(tài),沒有理解深淺拷貝就會犯錯。

深拷貝同淺拷貝的區(qū)別:

淺拷貝是指針拷貝,對一個對象進(jìn)行淺拷貝,相當(dāng)于對指向?qū)ο蟮闹羔樳M(jìn)行復(fù)制,產(chǎn)生一個新的指向這個對象的指針,那么就是有兩個指針指向同一個對象,這個對象銷毀后兩個指針都應(yīng)該置空。深拷貝是對一個對象進(jìn)行拷貝,相當(dāng)于對對象進(jìn)行復(fù)制,產(chǎn)生一個新的對象,那么就有兩個指針分別 指向兩個對象。當(dāng)一個對象改變或者被銷毀后拷貝出來的新的對象不受影響。

實現(xiàn)深拷貝,需要實現(xiàn)NSCoying協(xié)議,實現(xiàn)- (id)copyWithZone:(NSZone *)zone方法。如果父類實現(xiàn)了這個方法,子類重寫時候不要忘記調(diào)用父類方法,再加上自己邏輯。父類沒有實現(xiàn)的話,子類實現(xiàn)的時候要對父類也進(jìn)行處理一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)入本主題之前首先需要了解一些準(zhǔn)備知識! 那就是地址與指針的關(guān)系:計算機(jī)的內(nèi)存儲器被劃分為一個個的內(nèi)存單元。內(nèi)存單...
    八匹馬_BPM閱讀 642評論 2 0
  • 1、截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的數(shù)據(jù),分別輸出它們 ...
    強子ly閱讀 3,136評論 8 46
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,619評論 30 472
  • 1.寫一個NSString類的實現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,875評論 2 37
  • 外國記者采訪中國乒乓球運動員:恭喜你拿了世界冠軍,到達(dá)世界頂峰,以后有什么打算? 中國乒乓...
    白米飯兒閱讀 251評論 0 0

友情鏈接更多精彩內(nèi)容