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
- 8、协议
- TLS/SSL 协议详解 (8) 协议简介
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 协议
- 数据存储plist文件中找不对对应的键值对
- iOS App上架(Member Center中)的一些知识及原理和iOS App上架流程
- 静态成员函数访问非静态成员
- 数据结构——5 单链表排序
- 2016年度年中总结
- 8、协议
- java中List集合
- 谈谈Processing 3D世界 六 (续)
- 来赚app是真的吗,大家一起来赚吧,来赚官方下载最新最全使用教程
- C++单例模式的六种实现
- openlayer实现图层控件功能
- 控制台动态插入代码
- 我的心得
- 【leetcode】108. Convert Sorted Array to Binary Search Tree