8、协议

来源:互联网 发布:极点五笔 linux 编辑:程序博客网 时间:2024/06/05 09:24

协议

协议(Protocol)与Java的Interface(接口) 或者 C++的 纯虚类相同,就是用来声明接口的。协议只是定义了方法的列表,协议不负责实现方法,目的是让别的类来实现。

Graphics协议

Graphics中定义了onDraw方法,但是我们仔细分析一下 onDraw方法不能实现的,作为Graphics(几何图形)它无法知道它的子类如何绘制图形,它只能规定绘制图名字为onDra w签名和返回值等信息,但不能给出具体的实现,因此
Graphics(几何图形)不应该设计成为类而应该设计成为 协议。

Graphics.h

@protocol Graphics-(void) onDraw;@end

说明

协议只有接口部分,没有实现部分,所以没有m文件,关键字 @protocol,协议可以继承别的协议,协议中不能定义成员变量。

协议实现类Ellipse
Ellipse.h

#import <Foundation/Foundation.h>#import "Graphics.h"@interface Ellipse:NSObject <Graphics> {}@end

Ellipse.m

#import "Ellipse.h"@implementation Ellipse-(void)onDraw {    NSLog(@"绘制椭圆形");}@end

协议实现类Triangle
Triangle.h

#import <Foundation/Foundation.h>#import "Graphics.h"@interface Triangle:NSObject <Graphics> {}@end

Triangle.m

#import "Triangle.h"@implementation Triangle-(void)onDraw {    NSLog(@"绘制三角形");}@end

调用的main函数

#import <Foundation/Foundation.h>#import "Graphics.h"#import "Ellipse.h"#import "Triangle.h"int main (int argc, const char * argv[]) {    id graphics;    graphics = [[Ellipse alloc] init];    [graphics onDraw];    [graphics release];    graphics = [[Triangle alloc] init];    [graphics onDraw];    [graphics release];    return 0;}

运行 结果

绘制椭圆形 绘制三角形

小结

协议的实现是在类声明的父类之后,加上<Graphics>,与 类的单个继承不同,协议可以实现多个,表示要实现这个协议,如果有多个协议要实现用“,”号分隔:<P1,P2>

两个协议重要的协议

• NSCopying
• NSCoding

@required和@optional关键字

@protocol MyProtocol - (void)requiredMethod;@optional   - (void)anOptionalMethod;   - (void)anotherOptionalMethod;@required   - (void)anotherRequiredMethod;@end

@optional 表示可选择实现
@required 表示必须实现

0 0
原创粉丝点击