协议就是定义了一组方法,然后要求其他类去实现。
以下类的复制来举例说明,遵守NSCopying协议的类是如何实现复制的。
0x01 NSCopying协议
NSCopying是对象拷贝的协议。
类的对象如果支持拷贝,则该类应遵守并实现NSCopying协议。
用NSCopying协议来举例,是因为该协议中的方法只有一个,比较容易理解:
- (id)copyWithZone:(NSZone *)zone {
Person *model = [[[self class] allocWithZone:zone] init];
model.firstName = self.firstName;
model.lastName = self.lastName;
//未公开的成员
model->_nickName = _nickName;
return model;
}
0x02 复制Engine类
为了能够复制engine对象,Engine类需要采用NSCopying协议。
所以Engine类的接口更新如下:
//Engine类的接口
@interface Engine : NSObject <NSCopying>
...
@end // Engine
因为Engine类采用了NSCo