正式协议是包含了方法和属性的有名称列表,但与非正式协议不同的是,正式协议要求显示地采用。采用协议就意味着你承诺实现该协议中的所有方法。否则,编译器将会生成警告来提示你。(正式协议就像java接口一样)
声明协议
@protocol NSCopying
-(id) copyWithZone: (NSZone *) zone;
@end
协议可以继承
@protocol MySuperDuberProtocol <MyParentProtocol>
@end
NSObject是根协议,请不要将其与NSobject类混淆。
采用协议:
@interface Car: NSObject <NSCopying, NSCoding>
{
// instance varible
}
// methods
@end
协议和数据类型
你可以在使用的数据类型中为实例变量和方法参数指定协议名称,这样,你可以给编译器提供更多信息,从而有助于检查代码中得错误。
例如,NSControl类中有一个名为setObjectValue: 的方法,该方法要求对象遵守NSCopying协议
-(void) setObjectValue : (id <NSCopying>) object;
objective-c 2.0增加了两个新的协议修饰符: @optional和@required
不写: 必须要实现
@required: 必须要实现
@optional: 可以不实现