- 簡(jiǎn)單復(fù)制只能實(shí)現(xiàn)淺拷貝:指針賦值嘀韧,使兩個(gè)指針指向相同的一塊內(nèi)存空間悉尾,操作不安全葫督。
- Foundation類已經(jīng)遵守了
<NSCopying>
和<NSMutableCopying>
協(xié)議,即實(shí)現(xiàn)了copy和mutableCopy方法,因此Foundation對(duì)象可以使用這些方法創(chuàng)建對(duì)象的副本或可變副本
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
3.用戶自定義類遵守<NSCopying>
協(xié)議和<NSMutableCopying>
協(xié)議,則必須實(shí)現(xiàn)copyWithZone
方法和mutableCopyWithZone
方法棘脐,否則該類對(duì)象無(wú)法響應(yīng)copy和mutableCopy消息
4.實(shí)現(xiàn)copyWithZone方法人芽,例:
-(id)copyWithZone:(NSZone *)zone
{
Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];
return stu;
}
對(duì)應(yīng)main函數(shù)中:假設(shè)已經(jīng)有一個(gè)Student對(duì)象stu1隐圾;
則:Student stu2 = [stu1 copy];
實(shí)現(xiàn)stu2是stu1的副本伍掀,這里是深復(fù)制,stu1和stu2分別對(duì)應(yīng)不同內(nèi)存暇藏。
5.如果你的類產(chǎn)生了子類,那么copyWithZone:
方法也將
被繼承
Student *stu = [[Student allocWithZone: zone] init];
該方法應(yīng)該改為:
Student *stu = [[[self class] allocWithZone: zone]init];
如果編寫一個(gè)類的copyWithZone:方法那么子類的方法應(yīng)該先調(diào)用父類的copy方法以復(fù)制繼承來(lái)的copy實(shí)例變量.