【ObjectC—浅copy和深copy】
一、OC設(shè)計(jì)copy的目的
為了能夠從源對(duì)象copy一個(gè)新的對(duì)象副本,改變新對(duì)象(副本)的時(shí)候,不會(huì)影響到原來的對(duì)象。
二、實(shí)現(xiàn)copy協(xié)議
OC提供了兩種copy方法:copy和mutableCopy,一個(gè)對(duì)象要想使用copy方法必須實(shí)現(xiàn)NSCoppying協(xié)議,想使用mutabCopy必須實(shí)現(xiàn)NSMutableCopying協(xié)議。
三、copy的作用
?
?
?
從上面這個(gè)圖我們可以看出,其實(shí)創(chuàng)建可變或不可變對(duì)象跟源對(duì)象沒有關(guān)系,而跟復(fù)制的方式有關(guān)系。以NSString為例分情況說明下:
1)NSString調(diào)用copy方法
是淺拷貝,出于對(duì)性能的考慮,只是對(duì)源對(duì)象計(jì)數(shù)器+1(相當(dāng)于retain),并沒有產(chǎn)生新的對(duì)象。
2)NSMutableString調(diào)用copy方法
是深拷貝,產(chǎn)生一個(gè)不可變的副本,源對(duì)象的計(jì)數(shù)器不變,新產(chǎn)生對(duì)象的計(jì)數(shù)器為1。
3)NSString調(diào)用MutableCopy方法
是深copy,產(chǎn)生一個(gè)可變的副本,源對(duì)象的計(jì)數(shù)器不變,新產(chǎn)生對(duì)象的計(jì)數(shù)器為1。
4)NSMutableString調(diào)用MutableCopy方法
是深copy
由此可見,除了NSstring的copy方法是淺copy,其他三種情況都是深copy。
總結(jié)來說:
1)深copy:也就是內(nèi)容copy,會(huì)從源對(duì)象復(fù)制一份新的對(duì)象出來,新對(duì)象計(jì)數(shù)器為1,源對(duì)象的計(jì)數(shù)器不發(fā)生變化。
2)淺copy:也就是指針copy,只是將指針復(fù)制一份給對(duì)象,源對(duì)象計(jì)數(shù)器會(huì)+1,通常相當(dāng)于對(duì)象retain操作。
四、自定義對(duì)象實(shí)現(xiàn)copy
分兩步走:
1)實(shí)現(xiàn)copyying(mutableCopying)協(xié)議。
2)實(shí)現(xiàn)copyWithZone方法。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhouliweiblog/p/4967082.html
總結(jié)
以上是生活随笔為你收集整理的【ObjectC—浅copy和深copy】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息安全系统设计基础第九周学习总结
- 下一篇: JAVA调用c/c++代码