淺談深淺拷貝

在進行iOS開發時候,深拷貝很多人不經常用,但是有時候出了bug,追查很久,才發現是深淺拷貝的問題,往往浪費很多時間。

場景:

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

深拷貝同淺拷貝的區別:

淺拷貝是指針拷貝,對一個對象進行淺拷貝,相當于對指向對象的指針進行復制,產生一個新的指向這個對象的指針,那么就是有兩個指針指向同一個對象,這個對象銷毀后兩個指針都應該置空。深拷貝是對一個對象進行拷貝,相當于對對象進行復制,產生一個新的對象,那么就有兩個指針分別 指向兩個對象。當一個對象改變或者被銷毀后拷貝出來的新的對象不受影響。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容