1.簡單復制只能實現(xiàn)淺拷貝:指針賦值,使兩個指針指向相同的一塊內(nèi)存空間,操作不安全衫画。
2. Foundation類已經(jīng)遵守了和 協(xié)議,即實現(xiàn)了copy和mutableCopy方法,因此Foundation對象可以使用這些方法創(chuàng)建對象的副本或可變副本
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
3.用戶自定義類遵守協(xié)議和協(xié)議,則必須實現(xiàn)copyWithZone方法和mutableCopyWithZone方法睡榆,否則該類對象無法響應copy和mutableCopy消息
4.實現(xiàn)copyWithZone方法,例:
-(id)copyWithZone:(NSZone *)zone
{
Student *stu = [[StudentallocWithZone:zone]initWithName:self.nameAge:self.age];
return stu;
}
對應main函數(shù)中:假設已經(jīng)有一個Student對象stu1缠导;
則:Student stu2 = [stu1 copy];
實現(xiàn)stu2是stu1的副本廉羔,這里是深復制,stu1和stu2分別對應不同內(nèi)存僻造。
5. 如果你的類產(chǎn)生了子類,那么copyWithZone:方法也將
被繼承
Student *stu = [[Student allocWithZone: zone] init];
該方法應該改為: Student *stu =?[[[self class]allocWithZone: zone]init];
如果編寫一個類的copyWithZone:方法那么子類的方法應該先調(diào)用父類的copy方法以復制繼承來的copy實例變量.