明智而審慎地使用NSCopying

如果父類沒有實(shí)現(xiàn)NSCopying協(xié)議,那么子類必須復(fù)制它所繼承的實(shí)例變量,除此之外,它還要復(fù)制子類自身聲明的實(shí)例變量。

針對于繼承父類實(shí)例變量這一部分應(yīng)該采用alloc init方式來實(shí)現(xiàn)NSCopying的功能,因?yàn)榕c繼承相關(guān)的實(shí)現(xiàn)細(xì)節(jié)都被封裝在父類中了。
作者說這樣一來可以用set方法來設(shè)置繼承而來的實(shí)例變量的復(fù)制類型。
但是這里面說得太跳躍了,中間缺乏了過度的細(xì)節(jié)。
假設(shè)作者說的是對的,那么通過alloc init方式應(yīng)該只是完成了指針的指向功能,這樣子類就能指向父類的實(shí)例變量了,然后再通過子類的setter來設(shè)定是深復(fù)制還是淺復(fù)制,我只能這樣理解了。

如果類繼承了NSCopying,那么必須同時(shí)實(shí)現(xiàn)copyWithZone:。
copyWithZone方法會調(diào)用父類的實(shí)現(xiàn)來復(fù)制繼承而來的實(shí)例變量,然后再復(fù)制類自身聲明的實(shí)例變量。

如果父類使用了或者有可能使用了NSCopyObject,并且你還沒有繼承NSCopying,那你就不能使用alloc init來實(shí)現(xiàn)NSCopying行為,必須另想辦法。
NSCopyObject只創(chuàng)建對象的淺復(fù)制,這意味著你通過NSCopyObject獲取一個(gè)對象的時(shí)候,這個(gè)對象并沒有被初始化,復(fù)制過來的指針仍然指向了與被賦值對象中包含的指針相同的內(nèi)存,所以如果你對復(fù)制得到這個(gè)對象進(jìn)行了某些操作,那么被復(fù)制的那個(gè)對象也會受到影響。為了避免這些,你需要首先對復(fù)制過來的對象初始化。

除此之外,復(fù)制得到的對象的引用計(jì)數(shù)也沒有被初始化,你還要對其進(jìn)行初始化。

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

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

  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 26,344評論 19 129
  • 重點(diǎn)掌握 3 類對象和方法 對象就是一個(gè)物體 類的獨(dú)特存在就是一個(gè)實(shí)例,對實(shí)例進(jìn)行操作叫做方法。方法可以應(yīng)用于類或...
    Coder大雄閱讀 1,377評論 0 2
  • 下面是我最近兩年學(xué)習(xí)OC中的一些基礎(chǔ)知識,對于學(xué)習(xí)OC基礎(chǔ)知識的人可能有些幫助,拿出來分享一下,還是那句話不喜勿噴...
    小小趙紙農(nóng)閱讀 2,837評論 1 7
  • 你曾對我承諾過,無論你我日后關(guān)系是誰和誰都要一起去看場雪。 現(xiàn)在冬天來了,不知你還曾記得? 而我無論冬夏都不敢忘記...
    陽光中的木子閱讀 1,039評論 29 36
  • 立秋。 “池水漸涼蟬唱稀,長空雁陣嶺南飛”的情形并沒有出現(xiàn)。此時(shí)的武漢,沒有絲毫的秋意,自然也沒有關(guān)于秋季的詩意。...
    璞真如是閱讀 504評論 0 1

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