8、协议

协议

协议(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值