iOS 协议

来源:互联网 发布:雪山白凤凰知乎 编辑:程序博客网 时间:2024/05/28 11:50

Objective-C的协议等同于Java中接口的概念。下面我们来讨论协议的声明:

@protocol NSCopying

-(id)copyWithZone: (NSZone∗)zone;...
@end

协议看起来就像类别的声明,还是一堆方法声明的集合。但@protocol 关键字的出现说明了这是一份正式协议。

正式协议的意思是,每个采用(Java 中用实现implements这个词)这份协议的类必须实现这份协议中的所有方法。这种说法一直持续到Objective-C 2.0。

Objective-C 2.0开始,协议中的方法可以有选择地由类实现。对于需要实现的方法,使用@required 关键字修饰,对于可选择性地实现的方法,使用@optional 关键字修饰,比如:

@protocol TheProtocol

@required

-(void)firstMethod;-(void)secondMethod;

@optional

-(void)thirdMethod;

@end

这个协议规定,第 1、2 个方法是必须实现的,而第3个方法可以实现,但不要求一定实现。如果一个类要采用(或实现)这个协议,则需要在@interface 中这样声明:

@interface MyClass:NSobject<TheProtocol>

MyClass类的实现中,则应当实现该协议规定的2个必选方法及1个可选的方法。除了正式协议外,我们也可以采用非正式协议。非正式协议不需要采用@protocol 关键字

page74image9608

声明,但需要创建一个类别,例如MyCategory:

@interface NSObject(MyCategory)-(void)doSomething;
...
@end

由于 NSObject是所有Cocoa类的根类,这个类别实际上指明了任何类都可以实现这些方法。从而可以向任何对象发送这些消息,而不需要在类的声明中做任何特别的说明。 

原创粉丝点击