iOS开发 - Protocol协议及委托代理(Delegate)
因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。
当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议。注意,我这里说的是警告,而不是错误。对的,就算你不实现那些“必要实现”的方法,程序也是能运行的,只不过多了些警告。
Protocol(协议)的作用:
1. 定义一套公用的接口(Public)
@required:必须实现的方法
@optional:可选 实现的方法(可以全部都不实现)
2. 委托代理(Delegate)传值:
它本身是一个设计模式,它的意思是委托别人去做某事。
总结:协议是共同遵守的某种规则或规矩;代理是按照某种协议具体的实现者;
下面引用了博客园中作者求真求道的部分文章,感觉比较清晰:https://www.cnblogs.com/iyou/p/4939823.html
- DaChu.h
- /**
- * 下面是声明协议的固定格式,DaChuDelegate是协议的名称,因为是代理协议,名称格式为:类名+Delegate
- */
- @protocol DaChuDelegate <NSObject>
- - (void)doSomethingAftercaiZuohaole;
- @end
- @interface DaChu : NSObject
- /**
- * delegate 是dachu类的一个属性,weak 关键字是为了避免循环引用,<DaChuDelegate>表示遵守DaChuDelegate协议
- * 更加直白点:在大厨心里有一个人接受他的菜好了的信号去做一些事情,具体这个人是谁,大厨不关心,这个人的代号是delegate
- */
- @property (nonatomic, weak) id <DaChuDelegate> delegate;
- - (void)kaiShiZuoCai;
- @end
- Dachu.m
- #import "DaChu.h"
- @implementation DaChu
- - (void)kaiShiZuoCai{
- NSLog(@"开始做菜");
- sleep();
- NSLog(@"做好菜了,该上菜了");
- //下面这句是判断 一下delegate是否实现了doSomethingAftercaiZuohaole方法,如果delegate没有实现
- //直接[self.delegate doSomethingAftercaiZuohaole];会crash
- if ([self.delegate respondsToSelector:@selector(doSomethingAftercaiZuohaole)]) {
- [self.delegate doSomethingAftercaiZuohaole];
- }
- }
- @end
下面看一看代理(实现者)这个类里面的内容:
- #import "LaoWang.h"
- #import "DaChu.h"
- /** <DaChuDelegate>表示遵守DaChuDelegate协议,并且实现协议里面的方法 */
- @interface LaoWang ()<DaChuDelegate>
- @end
- @implementation LaoWang
- - (void)laoWangKaiYe{
- NSLog(@"老王开业了");
- DaChu *dachu1 = [[DaChu alloc] init];
- dachu1.delegate = self;//说明老王充当代理的角色,负责接收菜好了的信号。
- [dachu1 kaiShiZuoCai];//大厨开始做菜
- }
- - (void)doSomethingAftercaiZuohaole{
- NSLog(@"老王知道了");//这里可以通知服务员去上菜了
- }
- @end
总结:代理类似于现实生活中的代理公司,具体的工作代理公司帮你做;协议类似于你和代理公司签的合同。
iOS开发 - Protocol协议及委托代理(Delegate)的更多相关文章
- 【转】iOS开发-Protocol协议及委托代理(Delegate)传值
原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...
- iOS开发-Protocol协议及委托代理(Delegate)传值
前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...
- 浅谈iOS开发的协议(protocol)和代理(delegate)
协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...
- 【转】iOS 开发之协议protocal-代理传值delegate
原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...
- Ios开发之协议protocol
Protocol是ios开发中的一个难点也是一个重点,要想使用好,或者理解好它,可能需要时间的累积.今天我们就通过一个例子来简单的看一下,怎么样使用protocol. 我们今天用的例子就是模拟电脑插入 ...
- iOS 开发之协议-代理传值
刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值. 面试过几个童鞋,问道怎么用 del ...
- IOS开发-UI学习-delegate(代理)的使用,键盘消失
代理是IOS开发中用到的一种设计模式.今天做了一个代理的小练习: 以下项目实现了两个页面之间的相互切换,并且在切换页面的时候完成了从一个页面往另一个页面的传值.从主页面往其他页面传值是容易的,但是反过 ...
- IOS开发protocol使用
1.什么是protocol? protocol(协议)是用来定义对象的属性和行为,用于回调. 2.protocol分类? 协议中有三个修饰关键字@required和@optional和@propert ...
- IOS开发之----协议与委托(Protocol and Delegate) 实例解析
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 在写示例之前我给大家说下@required和@optional这两个关键 ...
随机推荐
- sum(sum(abs(y))) 中 sum(sum())什么意思?
>> y=[1 3;2 5] y = 1 3 2 5 >> sum(y) ans = 3 8 >> sum(s ...
- js 常用验证
邮箱验证: $(function () { $("#txt_Email").blur(function () { var ema ...
- 《精通Spring4.X企业应用开发实战》读后感第四章(Java反射)
package com.smart.reflect; public class Car { private String brand; private String color; private in ...
- 日期组件wdatepicker
导入WdataPicker文件包到项目的js文件夹下: 在用户管理中的添加.编辑jsp页面对生日表单项引入日期组件: <script type="text/javascript&quo ...
- MySQL8.0.16新特性:The Communication Protocol In Group Replication
MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...
- [Swift]LeetCode1079. 活字印刷 | Letter Tile Possibilities
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- git回退版本,已经commit过的文件丢了
参考:https://blog.csdn.net/qq_33877149/article/details/79705611 可以用 git reset --hard fa8694b 回退到以上相应的位 ...
- vue中声明式导航和编程式导航
官方文档:https://router.vuejs.org/zh-cn/essentials/navigation.html 声明式导航和编程式导航 共同点: 都能进行导航,都可以触发路由,实现组件切 ...
- CodeForces - 1003-B-Binary String Constructing (规律+模拟)
You are given three integers aa, bb and xx. Your task is to construct a binary string ssof length n= ...
- php数组生成树结构数据返回
现在有这样一个数组,要求按照树结构返回(当pid=0就表示其为菜单id,否则pid的值就是其属于某个菜单id下面): $array = array( 1 => array ('id' => ...