文档章节

协议

 蒲公英6_6守候
发布于 2015/11/08 14:00
字数 542
阅读 2
收藏 0

协议
OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议)。

@protocol Protocol <NSObject>

@required//必须实现的
-(void)eat;

@optional//可选实现的
-(void)talk;
@end

协议的定义格式:
@protocol  协议名  <父协议>
定义方法
@end
注:定义协议的关键字是@protocol,同时协议也是可以继承父协议的

协议中定义的方法还有两个修饰符:
@required:这个表示这个方法是其他类必须实现的,也是默认的值
@optional:这个表示这个方法对于其他类实现是可选的
这个就和类似与Java中的抽象类了,如果是abstract修饰的就必须实现,所以如果一个协议中没有@optional修饰的方法,那么这个协议就相当于Java中的接口了。

// Dog.h
// 协议
//
// Created by 蒲公英&微笑 on 2015/11/5.
// Copyright © 2015年 呵呵. All rights reserved.
//

#import <Foundation/Foundation.h>
@interface Dog : NSObject

@end

// Dog.m
// 协议
//
// Created by 蒲公英&微笑 on 2015/11/5.
// Copyright © 2015年 呵呵. All rights reserved.
//

#import "Dog.h"

implementation Dog
-(void)eat{
NSLog(
"给狗喂食!");
}
-(void)talk{
NSLog(@"汪!汪!汪!");
}
@end

// Person.h
// 协议
//
// Created by 蒲公英&微笑 on 2015/11/5.
// Copyright © 2015年 呵呵. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Protocol.h" 
@interface Person : NSObject<Protocol>

@end

// Person.m
// 协议
//
// Created by 蒲公英&微笑 on 2015/11/5.
// Copyright © 2015年 呵呵. All rights reserved.
//

#import "Person.h"

implementation Person
-(void)eat{
NSLog(
"孩纸们,吃饭啦!");
}
-(void)talk{
NSLog(@"子曰:");
}
@end
使用协议很简单,直接在继承类(NSObject)后面 <协议名>即可

然后我们在实现类中,去实现协议中必须要实现的方法

这里有一个方法respondsToSelector:@selector,这个方法的作用是判断当前对象中是否定义了一个方法,这个方法还是很有用的,如果在Java中,我们可能需要用反射去实现了。

协议在OC中也是一个很重要的概念,Foundation框架中很多地方都用到了协议,其实和Java中的抽象类以及接口非常相似



© 著作权归作者所有

上一篇: 代理模式
下一篇: 单例模式
粉丝 0
博文 15
码字总数 7681
作品 0
西安
私信 提问
协议(protocol)

一.什么是协议(protocol)? 1.  协议是多个对象之间协商的一个接口对象。 2.  协议提供一系列方法用来在协议的实现者和代理者之间的一种通信方式 3.  协议可以用来声明一大堆方法(不能...

小黑202
2016/07/15
14
1
swift4.1 系统学习十四 协议

// 协议 / OC中也有协议,swift中的协议的作用与OC中基本一样,只是在写法上有一点区别。 我们使用 protocol关键字来定义一个协议。在一个协议中只能存放计算式属性以及方法的声明, 而不能对...

小曼Study
2018/10/18
0
0
UDP协议基础

基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送、接收数据报的对象。Java提供了Dat...

Sheamus
2016/03/15
16
0
OC(协议代理委托)

FJBadManDelegate.h #import <Foundation/Foundation.h> #import <Foundation/Foundation.h> //@protocol 是声明协议的关键字 //<>是遵守协议的语法:":"是继承的语法;<>中就是所遵守的协议的......

鹿微微鹿
2016/03/28
65
0
Object-C基础-08-protocol

一、 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 ...

Corwien
2016/03/20
47
0

没有更多内容

加载失败,请刷新页面

加载更多

Activity启动模式二

上篇文章Activity启动模式一主要介绍了Activity的四种启动模式,这些启动模式都是在AndroidManifest中进行配置的。除此之外,Android系统还通过Intent类提供了一些标志位,同样可以指定Activ...

ltlovezh
52分钟前
7
0
三原色还原

1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式...

天王盖地虎626
今天
7
0
kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
今天
8
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部