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消息 spa
4.實現copyWithZone方法,例:指針
-(id)copyWithZone:(NSZone *)zone { Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age]; return stu; }
對應main函數中:假設已經有一個Student對象stu1;code
則:Student stu2 = [stu1 copy];對象
實現stu2是stu1的副本,這裏是深複製,stu1和stu2分別對應不一樣內存。繼承
5. 若是你的類產生了子類,那麼copyWithZone:方法也將內存
被繼承it
Student *stu = [[Student allocWithZone: zone] init];io
該方法應該改成: Student *stu = [[[self class] allocWithZone: zone]init];
若是編寫一個類的copyWithZone:方法那麼子類的方法應該先調用父類的copy方法以複製繼承來的copy實例變量.