iOS开发:协议与代理
2016-04-07 13:44
218 查看
一、什么是协议?
协议是多个类共同的公共行为规范,这个规范规定了类和类之间是如何交流的。协议里通常是定义一组公用的方法,但不会为这些方法提供实现,方法的实现交给遵从协议的类去完成。
二、类和类是如何通过协议实现交流的?
需要明白的是制定协议可以在一个单独的protocolName.h文件中制定,也可以在一个类内制定。只提供一组公共的方法(规范),不提供方法的具体实现。
具体步骤如下:(以protocolName.h为例)
第一步:创建协议文件,在协议文件内制定一组公用方法,就是规范。协议中的方法不强制实现,但有警告。可用@optional修饰,协议方法可选实现。
第二步:根据需要让相应的类(类0)创建协议指针,例如:id<protocolName>delegate;协议指针是用来调用协议方法的。创建了协议指针的类就是协议的制定者相当于与在类内创建协议。
第三步:根据协议让相应的类(类1,类2...)遵从协议,并实现协议中的方法。
第四步:设置代理,例如:类0对象.delegate = 类2对象。
简单的理解就是类1想要完成一个任务,但他没有这个能力,他想把这个任务委派给类2(或其它遵从了协议的类)去做。让别的类去完成就需要说明具体的任务,这个任务就是协议。每当类1做这个任务时就会去找遵从了协议的类帮忙,找好之后就把代理权给这个类,类0对象.delegate = 类2对象
三、关于非正式协议
非正式协议是通过类别(catgory)实现的。类别以NSObject为基础,为NSObject创建类别指定应该新增的方法。因为NSObject是所有类的父类,所以其他类都会继承类别里新增的方法,这些方法就相当于一种规范。这种基于NSObject定义的类别即可认为是非正式协议。实现了方法的类就认为是遵从了协议并实现了协议方法。
四、协议可以多继承
OC在协议的遵守上允许使用多继承。但是协议只能提供接口,而没有提供实现。如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法。如果既需要多继承接口,又要多继承其实现,协议是无能为力的。
协议是多个类共同的公共行为规范,这个规范规定了类和类之间是如何交流的。协议里通常是定义一组公用的方法,但不会为这些方法提供实现,方法的实现交给遵从协议的类去完成。
二、类和类是如何通过协议实现交流的?
需要明白的是制定协议可以在一个单独的protocolName.h文件中制定,也可以在一个类内制定。只提供一组公共的方法(规范),不提供方法的具体实现。
具体步骤如下:(以protocolName.h为例)
第一步:创建协议文件,在协议文件内制定一组公用方法,就是规范。协议中的方法不强制实现,但有警告。可用@optional修饰,协议方法可选实现。
第二步:根据需要让相应的类(类0)创建协议指针,例如:id<protocolName>delegate;协议指针是用来调用协议方法的。创建了协议指针的类就是协议的制定者相当于与在类内创建协议。
第三步:根据协议让相应的类(类1,类2...)遵从协议,并实现协议中的方法。
第四步:设置代理,例如:类0对象.delegate = 类2对象。
简单的理解就是类1想要完成一个任务,但他没有这个能力,他想把这个任务委派给类2(或其它遵从了协议的类)去做。让别的类去完成就需要说明具体的任务,这个任务就是协议。每当类1做这个任务时就会去找遵从了协议的类帮忙,找好之后就把代理权给这个类,类0对象.delegate = 类2对象
三、关于非正式协议
非正式协议是通过类别(catgory)实现的。类别以NSObject为基础,为NSObject创建类别指定应该新增的方法。因为NSObject是所有类的父类,所以其他类都会继承类别里新增的方法,这些方法就相当于一种规范。这种基于NSObject定义的类别即可认为是非正式协议。实现了方法的类就认为是遵从了协议并实现了协议方法。
四、协议可以多继承
OC在协议的遵守上允许使用多继承。但是协议只能提供接口,而没有提供实现。如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法。如果既需要多继承接口,又要多继承其实现,协议是无能为力的。
相关文章推荐
- iOS SDK开发
- iOS开源弹幕库BarrageRenderer
- iOS 证书的事
- iOS图片裁剪和小图看大图动画
- IOS delegate 实例
- iOS 获取通讯录里边的电话号码AddressBook
- iOS解决键盘弹出遮挡输入框问题
- YouKu iOS笔试题二
- YouKu iOS笔试题一
- RNCryptor IOS文件加密解密
- iOS部分知识点小结
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- iOS KVC 和 KVO 详解
- ios-kvc\kvo 原理
- iOS-百度地图之LBS.云检索学习
- iOS KVC & KVO
- iOS 高级开发 KVC(一),ios开发kvc
- iOS开发之----KVC的使用
- ios开发之你真的了解了KVC吗?
- iOS中静态库的使用