13.1 正式协议
1、与非正式协议一样,正式协议包含了方法和属性的有名称列表。
2、不同的是,正式协议要求显式地采用(在@interface声明中列出协议的名称)
3、采用协议之后,类就要遵守该协议,实现该协议的所有方法
13.1.1 声明协议
@protocol MySuperDuberProtocol <MyparentProtocol>
-(void)....//需要实现的方法
@end
第一行代码表示MySuperDuberProtocol协议继承于MyparentProtocol协议,因此必须实现两个协议中所有需要实现的方法。
通常可以使用NSObject作为根协议(不要将其与NSObject类混淆)NSObject类复合NSObject协议,这意味着所有的对象都符合NSObject协议
13.1.2 采用协议
@interface Car:NSObject<NSCopying>
{
//method
}
@end
尖括号里面是要实现的协议,如果要实现两个协议,可以
@interface Car:NSObject<NSCopying,NSCoding>
采用某个协议,表明该类的对象可以完成两个重要的操作:
1、能够对自身进行编码或解码
2、能够创建自身的副本
13.1.3 实现协议
13.2 复制
copy消息会告诉对象创建一个全新的对象,并让对象与接收copy的原对象完全一样
13.2.4 协议和数据类型
可以在数据类型中为实例变量和方法参数制定协议名称,有助于检查代码中的错误,例如
-(void)setObjectValue:(id<NSCopying>)object;
13.3 Objective-C 2.0 的新特性
@optional
-(void)...//不一定要实现
@required
-(void)...//一定要实现
13.4 委托方法
委托(delegation)是一个经常与协议共用的特性。委托就是某个对象指定另一个对象处理某些特定任务的设计模式。
使用委托来执行相应方法时,代码首先询问委托是否拥有这个方法的实现,如果实现了,它就会要求委托处理这个方法