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实例变量.