對象的拷貝

首先來介紹一下對象的拷貝的概念吧:

什么要由對象的拷貝這么一個概念呢?看一個場景:假如現(xiàn)在一個對象中又一個數(shù)組對象,現(xiàn)在我們生成一個對象,同時將這個對象賦值給另外一個對象,那么現(xiàn)在

問題是這兩個對象中的數(shù)組對象是同一個,那么如果一個對象中去修改這個數(shù)值中的內(nèi)容,另外一個對象中的數(shù)組內(nèi)容也會被修改,相當于這個數(shù)組對象是共享的,

當然我們有時候是不希望這種形式的出現(xiàn)的,這時候我們就出現(xiàn)了對象的拷貝。

深拷貝和淺拷貝

在拷貝對象中也是有深拷貝和淺拷貝之分的

淺拷貝:只拷貝所有屬性對象的指針

深拷貝:拷貝屬性對象的內(nèi)容


.h

#import

@interfacePerson?:?NSObject?

@property(nonatomic,retain)NSMutableArray*apples;

@property(nonatomic)intage;

@end

.m

#import "Person.h"

@implementationPerson

-?(id)copyWithZone:(NSZone*)zone{

//創(chuàng)建一個新的副本對象

//這個方法是會被繼承的,所以這里還是不用

//[Person?allocWithZone:<#(struct?_NSZone?*)#>];

Person*?p?=?[[selfclass]allocWithZone:zone];

//p.apples?=?_apples;//是指針賦值,所以還是淺拷貝

//深拷貝

//拷貝之后引用計數(shù)會+1,需要release以下

p.apples=?[_applesmutableCopy];

p.age=?_age;

[p.applesrelease];

//但是如果我們使用->語法就不需要了,因為我們沒有使用set方法,引用計數(shù)沒有操作

//但是這種方式我們不采用

//p->_apples?=?[_apples?mutableCopy];

returnp;

}

@end

最后編輯于
?著作權(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)容

  • 一 :拷貝的相關(guān)概念 copy語法的目的:改變副本的時候,不會影響到源對象; 深拷貝:內(nèi)容拷貝,會產(chǎn)生新的對象。新...
    Cheriez閱讀 547評論 0 1
  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 一、淺拷貝 首先創(chuàng)建Person.h和Person...
    石虎132閱讀 661評論 0 5
  • 在JS中,有六種數(shù)據(jù)類型,分別是數(shù)值(Number)、字符串(String)、布爾型(Boolean)、undef...
    大春春閱讀 1,142評論 0 3
  • 拷貝也即是復(fù)制。那么深拷貝和淺拷貝呢? 在JavaScript這門語言中,數(shù)據(jù)類型分為兩大類:基本數(shù)據(jù)類型和復(fù)雜數(shù)...
    avery1閱讀 397評論 0 0
  • 對象的拷貝 深度拷貝一個對象 java.lang.Object 根類已經(jīng)定義了 clone() 方法。子類只需要事...
    WooiiiWooiii閱讀 2,467評論 0 0

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