父類實(shí)現(xiàn)深拷貝時,子類如何實(shí)現(xiàn)深度拷貝萎庭。父類沒有實(shí)現(xiàn)深拷貝時霜医,子類如何實(shí)現(xiàn)深度拷貝。
深拷貝同淺拷貝的區(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)一個對象改變或者被銷毀后拷貝出來的新的對象不受影響丰辣。
實(shí)現(xiàn)深拷貝需要實(shí)現(xiàn)NSCoying協(xié)議撒强,實(shí)現(xiàn)- (id)copyWithZone:(NSZone *)zone 方法禽捆。當(dāng)對一個property屬性含有copy修飾符的時候,在進(jìn)行賦值操作的時候?qū)嶋H上就是調(diào)用這個方法飘哨。
父類實(shí)現(xiàn)深拷貝之后胚想,子類只要重寫copyWithZone方法,在方法內(nèi)部調(diào)用父類的copyWithZone方法芽隆,之后實(shí)現(xiàn)自己的屬性的處理
父類沒有實(shí)現(xiàn)深拷貝浊服,子類除了需要對自己的屬性進(jìn)行處理,還要對父類的屬性進(jìn)行處理胚吁。