Objective中的协议(Protocol)
Objective中的协议(Protocol)
作用:
- 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明).
- 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.
协议的声明:
@protocol 协议名称 <NSObject>
//方法的声明;
@end
- 新建1个协议的方式. NewFile OC-File - protocol
协议的文件名: .h 并且只有1个.h文件.
在协议中,只能用来声明方法,协议的作用:就是专门用来写方法声明的.
类遵守协议:
- 如果想要让1个类,拥有协议中定义的所有的方法声明.那么就让这个类遵守这个协议.
- 类只要遵守1个协议,那么这个类就拥有了这些协议中定义的所有的方法的声明了.
@interface 类名 : 父类名 <协议名称>
@end
- : 表示继承.
- <> 表示遵守的协议.
- 当1个类,遵守了1个协议,那么就相当于这个类拥有了协议中定义的所有的方法的声明.
这个类只是拥有了这个协议中的方法的声明而已. 没有实现.所以 这个类,就应该实现协议中的方法.
协议和延展的区别:
- 1个延展只能针对1个类.
- 1份协议 可以多个类都来遵守,他们都拥有协议中的方法的声明
- 延展的成员是私有. 协议的成员是公开的
- 1个类遵守1个协议,就相当于这个类拥有这个协议中的方法的声明.
如果类不实现协议中的方法,其实也不会报错.编译器只是会报警告.
但是当创建对象,来调用这个没有实现的协议中的方法的时候,就会报错.
类是单继承. 但是协议可以多遵守:
- 1个类只能有1个父类
- 但是1个类可以同时遵守多个个协议.
@interface 类名 : 父类名 <协议名称1,协议名称2......>
@end
当1个类遵守了多个协议之后,就相当于这个类拥有了所有协议中定义的方法的声明.
那么这个类,就应该实现所有协议中的方法.
如果不实现,其实也不会报错.编译器只是会报警告.
- 但是当创建对象,来调用这个没有实现的协议中的方法的时候,就会报错.
@required 与 @optional
在协议中,如果方法的声明被@required修饰,那么遵守这个协议的类必须要实现这个方法,否则编译器会发出警告.
在协议中,如果方法的声明被@optional修饰,那么遵守这个协议的类可以实现这个方法,也可以不实现这个方法.不实现编译器也不会报警告.
- 其实,无论是@required还是@optional你都可以不实现. 编译器是不会报错的. 仍然可以编译 运行.
作用:
- @required修饰的方法如果遵守协议的类没有实现 编译器给1个警告.
- @optional修饰的方法如果遵守协议的类没有实现 编译器不会给警告.
- 无论是@required还是@optional如果没有实现方法 在运行的时候还是会报错.
- 这两个关键字的主要作用:在于程序员沟通,告诉遵守协议的类 哪些方法是必须要实现的,因为这些方法我会调用.
写协议的人,告诉遵守协议的类 哪些方法必须要实现 哪些方法可以不实现.
协议可以遵守另外1个协议,并且可以遵守多个协议
@protocol 协议名称3 <协议名称1,协议名称2......>
@end
- 那么这个协议3就拥有协议1、协议2……的所有的方法的声明.
如果某个类遵守了协议3.那么这个类就拥有协议1、2、3的所有的方法的声明.
任何协议都必须要间接的或者直接的从NSObject基协议继承.
- 协议可以继承另外1个协议. A 协议 继承了 B协议. 那么A协议中不仅有自己的方法的声明,还有B协议中的方法的声明.
如果有1个类遵守了A协议,那么这个类就拥有了, A、B协议中的所有的方法的声明.
协议之间继承的语法格式:
@protocol A协议名称 <B协议名称>
@end
- 代表A协议继承自B协议, A协议中既有自己的方法声明,也有B协议中的方法声明.
- NSOBject: 这是1个类. 是所有的OC类的基类. 这个类是苹果早就定义好得.
NSOBject: 这也是1个协议. 也是苹果早就定义好得. 这个协议被NSObject类遵守.
- 所以,所有的OC对象都拥有这个协议中的所有的方法.
- 这个协议我们也叫做基协议.
写协议的规范: 任何1个协议,必须要间接的或者直接的去遵守这个NSObject基协议.
协议的名称可以和类的名称相同:
- 如果父类遵守了某个协议,那么父类就相当于拥有协议中方法声明,子类也有了.
- 相当于子类也遵守了这个协议.
Objective中的协议(Protocol)的更多相关文章
- Objective-C 中的协议(@protocol)和接口(@interface)的区别
Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...
- Objective-C中的协议(Protocol)和类别(Category)
1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...
- Swift和Objective-C中的协议(protocol)有什么异同
Swift和Objective-C中的protocol的相同点在于:两者可以被用作代理.Objective-C中的protocol类似于Java中的Interface,在实际开发中主要用与适配器模式( ...
- Objective-C( protocol协议)
protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...
- 协议 protocol
协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承.它类似java中的接口. 正式协议(formal protocol)--------------- ...
- 窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用
协议与委托代理回调在之前的博客中也是经常提到和用到的在<Objective-C中的委托(代理)模式>和<iOS开发之窥探UICollectionViewController(四) - ...
- DNS 中的协议字段详细定义
DNS中的协议字段定义 Table of Contents 1 概述 2 DNS Classes 3 DNS OpCodes 4 DNS RCODEs 5 DNS Label Types 6 DNS资 ...
- iOS阶段学习第19天笔记(协议-Protocol)
iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者 之间通讯的一种方式 2) ...
- 转iOS中delegate、protocol的关系
iOS中delegate.protocol的关系 分类: iOS Development2014-02-12 10:47 277人阅读 评论(0) 收藏 举报 delegateiosprocotolc ...
随机推荐
- SDK无法更新
http://jingyan.baidu.com/article/da1091fbd232fe027949d653.html
- XGPush集成(信鸽集成)demo
#import "AppDelegate.h" #import "XGPush.h" #import "XGSetting.h" #defi ...
- java代理课程测试 spring AOP代理简单测试
jjava加强课程测试代码 反射. 代理 .泛型.beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169 热身运动 ...
- app 转caf 音频 代码
afconvert /Users/xiaoye/Downloads/cat.caf /Users/xiaoye/Downloads/cat1.caf -d ima4 -f caff -v;
- 国内BI工具/报表工具厂商简介
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 卡特兰数(Catalan)简介
Catalan序列是一个整数序列,其通项公式是 h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, ...
- Baby Step Gaint Step
给定同余式,求它在内的所有解,其中总是素数. 分析:解本同余式的步骤如下 (1)求模的一个原根 (2)利用Baby Step Giant Step求出一个,使得,因为为素数,所以有唯一解. (3)设, ...
- poj 1386 Play on Words(有向图欧拉路+并查集)
题目链接:http://poj.org/problem?id=1386 思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指 ...
- hdoj 1166 敌兵布阵(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路分析:该问题为动态连续和查询问题,使用数组数组可以解决:也可使用线段树解决该问题: 代码如下 ...
- Linux-中断和中断处理
1.中断 #中断使得硬件得以发出通知给处理器,本质上是一种电信号 #中断随时能够产生.内核随时会被打断 #不同设备的中断不同,每一个中断都通过一个唯一的数字标识.称为IRQ(中断请求) 2.中断处理程 ...