1.簡單複製只能實現淺拷貝:指標賦值,使兩個指標指向相同的一塊記憶體空間,操作不安全。
2. Foundation類已經遵守了<NSCopying>和 <NSMutableCopying>協議,即實現了copy和mutableCopy方法,因此Foundation對象可以使用這些方法建立對象的副本或可變副本
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
3.使用者自訂類遵守<NSCopying>協議和<NSMutableCopying>協議,則必須實現copyWithZone方法和mutableCopyWithZone方法,否則該類對象無法響應copy和mutableCopy訊息
4.實現copyWithZone方法,例:
-(id)copyWithZone:(NSZone *)zone
{
Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];
return stu;
}
對應main函數中:假設已經有一個Student對象stu1;
則:Student stu2 = [stu1 copy];
實現stu2是stu1的副本,這裡是深複製,stu1和stu2分別對應不同記憶體。
5. 如果你的類產生了子類,那麼copyWithZone:方法也將
被繼承
Student *stu = [[Student allocWithZone: zone] init];
該方法應該改為: Student *stu = [[[self class]
allocWithZone: zone]init];
如果編寫一個類的copyWithZone:方法那麼子類的方法應該先調用父類的copy方法以複製繼承來的copy執行個體變數.