Object—C编程详解(四)-协议(protocol)
来源:互联网 发布:学笛子的软件 编辑:程序博客网 时间:2024/06/03 20:29
协议
协议的功能类似于c++中对抽象基类的多重继承。协议是多个类共享方法的列表。协议中列出的方法在本类中并没有相应的实现,而是由别的类来实现这些方法。如果一个类要遵守一个协议,该类就必须实现特定协议的所有方法(可选方法除外)。
非正式协议
非正式协议是NSObject类(显而易见,还包括它的子类)的类别,其所有的子类都含蓄地接受了这个协议。(类别是Objective-C的一个语言特点,可以让你在无需子类化的前提下为一个类增加方法。)非正式协议中的方法是否实现都是可选的,因此在调用非正式协议中的方法之前,需要去检查对象类是否实现了它。在Objective-C2.0中引入可选的正式协议方法之前,非正式协议是Foundation和AppKit类实现委托的唯一方式。
类别(catgory)可以实现非正式协议,这种以NSObject类为基础,为NSObject创建类别,创建类别时即可指定该类别应该新增的方法。当某个类实现NSObject的该类别时,就需要实现该类别下的所有方法,这种基于NSObject定义的类别即可认为是非正式协议。
正式协议
定义一个协议需要使用@protocol指令,紧跟着是协议名称,然后是声明的一些方法,在指令@end之前的所有方法的声明都是协议的一部分。
@protocol 协议名 <父协议1,父协议2>{ 零到多个方法定义....}
说明:
1.协议名应与类名采用相同的命名规则。即如果仅从语法角度来看,协议名只要是合法的标示符即可。
2.一个协议可以有多个直接父协议,但协议只能是继承协议,不能继承类。
3.协议中定义的方法只有方法签名,没有方法实现;协议中包含的方法即可是类方法,也可是实例方法。
4.协议定义的是多个类共同的公告行为规范,因此,协议里所有的方法都是公开的访问权限。
非正式协议与正式协议的区别1.非正式协议通过为NSObject创建类别来实现,而正是协议则直接使用@protocol创建。
2.遵守非正式协议通过继承带特定类别的NSObject来实现;而遵守正式协议则有专门的语法。
3.遵守非正式协议不要求实现协议中定义的所有方法;而遵守正式协议则必须实现协议中定义的所有方法。
为了弥补遵守正式协议必须实现协议的所有方法造成灵活性不足,Object-C2.0新增@optional、@required。
①@required
该类的方法在遵守相应协议的类中是必须被实现的,不然编译器会告警(显然这是在编译时做的检查,而不是在运行时)
②@optional
该类的方法在遵守相应协议的类中是否实现是可选的
协议体现的是一种规范,定义协议的类可以把协议定义的方法委托给实现协议的类,这样可以让类定义具有更好的通用性质,因为具体的动作交给协议的实现类去完成。无论是基于Mac的Cocoa应用开发,还是ios应用开发,各种应用程序大量依赖委托。
- Object—C编程详解(四)-协议(protocol)
- object-c协议(protocol)
- object-c的protocol(协议)
- Object-C 协议 Protocol
- Object-C 协议 Protocol
- Object-C 协议protocol
- Object-C 协议@protocol
- 【Object-C】协议 @protocol
- object-c-协议-protocol
- Object-c学习之路五(@protocol协议)
- Object-C的协议(protocol)学习小结
- IOS开发基础Object-C(13)—— protocol协议
- object-c 正式协议 protocol
- object-c学习:协议 Protocol
- object-c学习:协议protocol
- Object-C中的协议Protocol
- object-c学习:协议protocol
- Object-C加强 Protocol协议
- BZOJ系列3174《[Tjoi2013]拯救小矮人》
- C++视频学习第2天
- Java工厂模式应用
- php的第三方登录----新浪微博
- 传统 IOE 架构已无力应对大数据的挑战,云计算变革时代已经到来
- Object—C编程详解(四)-协议(protocol)
- crm2013更改背景
- 黑马程序员_线程知识总结
- Calculate S(n)
- redhat linux 安装 gcc编译器
- 二叉树先序中序后序遍历的非递归实现
- 去IOE技术架构变革的名词解释
- 解压缩命令大全
- Android AsyncTask异步任务