对象有用复制特性,需实现 NSCopying 或NSMutableCopying 协议,实现该协议的 copyWithZone: 方法和 mutableCopyWithZone: 方法
浅拷贝后,若向某对象做操作例如增加,删除...那么拷贝前和拷贝后的2个对象(实际一个对象两个指针)都会改变.深拷贝则不会,因为深拷贝是真正的两个对象
.h 文件需要有拷贝申明
@interface CopyUser : NSObject<NSCopying>
- (id)copyWithZone:(NSZone *)zone {
User *copyUser = [[selfclass]allocWithZone:zone] init]; // selfclass 创建子类对象,也可以作为父类使用 ,如果写成[User allocWithZone:也可以,但只是指父类对象.但没有前者专业严谨
copyUser.age = _age;
return copyUser;
} //返回的是不可变对象
- (id)mutableCopyWithZone:(NSZone *)zone {
UserMutable *copyUser = [[self class] allocWithZone:zone] init];
copyUser.age = _age;
return copyUser;
} //返回的是可变对象
本文介绍Objective-C中对象的拷贝机制,包括浅拷贝与深拷贝的区别及其实现方式。为了实现拷贝功能,需要遵守NSCopying或NSMutableCopying协议,并实现copyWithZone:和mutableCopyWithZone:方法。

665

被折叠的 条评论
为什么被折叠?



