objective-c笔记:协议

正式协议是包含了方法和属性的有名称列表,但与非正式协议不同的是,正式协议要求显示地采用。采用协议就意味着你承诺实现该协议中的所有方法。否则,编译器将会生成警告来提示你。(正式协议就像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: 可以不实现