淺拷貝:就是在已經(jīng)有一塊內(nèi)存空間了(存儲(chǔ)數(shù)據(jù)的)皮璧,有一個(gè)指向這個(gè)空間的指針a,來修改這個(gè)空間內(nèi)容分飞,淺拷貝這個(gè)指針的意思就是在這個(gè)內(nèi)存空間添加一個(gè)指針b悴务,用來修改這個(gè)空間的值,b修改內(nèi)存空間的值之后譬猫,當(dāng)a訪問這個(gè)內(nèi)存空間的時(shí)候也跟著改變惨寿。
深拷貝:就是在已經(jīng)有一塊內(nèi)存空間了(存儲(chǔ)數(shù)據(jù)的),有一個(gè)指向這個(gè)空間的指針a删窒,來修改這個(gè)空間內(nèi)容裂垦,深拷貝這個(gè)指針的意思就是創(chuàng)建一個(gè)新的的內(nèi)存空間(指針b)把之前內(nèi)存空間的里面的屬性復(fù)制,b修改內(nèi)對(duì)應(yīng)存空間的值之后肌索,當(dāng)a訪問他自己對(duì)應(yīng)的內(nèi)存空間的里面的值所以不改變蕉拢。
iOS的淺拷貝 NSString ?NSArray ?等不可變的的 “=” ?“copy” 地址不改變
對(duì)象的自定義淺拷貝
-(id)copyWithZone:(NSZone*)zone{
? ? NSObject *object = [[self class] allocWithZone:zone];
?? ?object.name = self.name;
? ? object.age = [self.age copy];
? ? return object;
}
iOS的深拷貝 NSString ? 實(shí)用“mutableCopy”??還有?NSMutableString ?NSMutableArray ?等不可變的的 “mutableCopy” ?“copy” 地址改變
對(duì)象的自定義深拷貝
-(id)copyWithZone:(NSZone*)zone{
? ? NSObject *object = [[self class] allocWithZone:zone];
?? ?object.name = [NSString stringWithFormat:@"%@",self.name];
? ? object.age = [self.age mutableCopy];
? ?return object;
}