protocol 和delegate(协议和代理)的区别
定义
protocol:中文叫协议,一个只有方法体(没有具体实现)的类,Java中称作接口,实现协议的类必须实现协议中@required标记的方法(如果有的话);
delegate:中文叫代理或委托,是一种设计模式。以协议的方式去体现(可以理解为协议的一种),区别在于代码中常以<xxxDeletgate>标示,以便清晰辨明此为代理。
举例说明
下面以一个ViewController要绘制TableView来进行说明:
要绘制TableView,首先要实现两个协议 UITableViewDataSource,UITableViewDelegate
我们先看看UITableViewDataSource里边都是怎么写的。
两个@required标明必须实现的方法,其他都是可选进行实现的方法
再来看看UITableViewDelegate 里都是怎么写的。
全是可选的方法,willxxx、didxxx 什么的,看起来跟UITableViewDataSource里的好像不太一样。
然后在http://blog.csdn.net/huifeidexin_1/article/details/7567731 这篇文章里,作者总结了代理的2个作用:
其次,我简单的总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。(这个经常见,例如在异步请求中,界面事件触发数据层改变等等)3.利用委托赋值,这种方法感觉是为了不暴露自己的属性就可以给自己复值,而且这样更方便了类的管理,只有在你想要让别人给你赋值的时候才调用,这样的赋值更可控一些。(例如tableView中的委托(dateSource)中常见)。
根据作者的描述,此代理的作用应该是传递事件。
等等,你说什么,好像不实现也没什么影响?再来看看另一个作者怎么说的。https://segmentfault.com/q/1010000003099524
你没完全理解“委托”的意思哈:)
首先,如楼上所说,
@optional
后面的所有方法都是可选的。也就是说,UIActionSheetDelegate
里面所有的方法都是不必须实现的。其次,就算你一个方法都不实现,actionSheet 也一样能“跑起来”,就是能正常显示出来,能正常点击。问题在于,你无法指定点击了之后干什么。
而通过实现这些委托方法,你才能指定点击按钮之后干什么。从方法名就能看出含义,比如如果用户点击了按钮,就会调用委托的
clickedButtonAtIndex
方法了,就会执行你写在这个方法里的代码;如果你没实现这个方法,它就什么都不做。
那么 self.xxx.delegate = self 是什么意思? 摘自http://swiftist.org/topics/350
1.delegate在ios的开发中很常见,中文翻译成委托或者代理,意思我委托你帮我处理一些事情,delegate通常是以protocol形式出现,意思你要成为我的代理必须实现某些协议。
2.比如你在ViewController上放置了一个UITableView,如果你想在UITableView的Cell在被按下时做一些事情,就可以通知其delegate,我有一个cell被按下了,并附上cell的indexPath,通知的方式就是调用delegate的相关函数。
3.在上面的场景中,就需要将ViewController作为UITableView的delegate,并且ViewController必须要实现UITableViewDelegate的相关方法
还不理解的话,有个更通俗的解释 http://www.cocoachina.com/bbs/read.php?tid=259133
“委托的意思不就是自己的任务交给其他人去做么”你这么理解是对的
对象.delegate=self的意思就是对象的任务交给self去做 对象!=self假如你有对象A 对象B ,A是B的成员变量
class B
{
member A
}
在B中写这么一句“A.delegate=self”
按你的理解 应该是A的任务交给B去完成 理解了没
综上所述
普通的协议只是一个公共的接口,里面会规定你必须实现的一些东西;代理(一种特殊的协议),你实现其中方法的话,就是告诉发布代理的类,这件事你去做了。
个人愚见,不对之处,还请指出。
其他介绍两者区别的文章:
http://www.cnblogs.com/qingjoin/archive/2012/11/22/2782602.html
http://blog.csdn.net/chiuan/article/details/7539010
protocol 和delegate(协议和代理)的区别的更多相关文章
- Protocol and Delegate协议和代理
1.什么是协议? OC协议仿照Java的接口.协议和接口,都是不同类的对象之间一种通信的机制.2.协议的基础语法 单纯的语言描述协议的语法,很难让人理解,主要因为在OC中协议是类对象的通信机制,他 ...
- 简单例子让你很好的理解:协议与委托 (Protocol and Delegate)
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 示例: 1 2 3 4 5 6 7 8 9 // GoodChild.h ...
- iOS——protoco和delegate (事件代理)
一:被代理人personOne personOne.h #import <Foundation/Foundation.h> @protocol SomeThing<NSObject& ...
- iOS开发之protocol和delegate
protocol--协议 协议是用来定义对象的属性,行为和用于回调的. 协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...
- C++模拟实现Objective-C协议和代理模式
Objective-C的协议和代理是运用最多的特性之一,可以说在苹果系列开发中无处不在.事实上很多人都不知道其背后的原理.事实上简单点说,这就是设计模式中的代理模式的经典运用.代理模式简单点说就是为其 ...
- 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)
目录 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) 简结 RTP RTCP RTSP 区别与联系 RTSP.RTMP.HLS 区别与联系 关于直播 流媒体各协议层次图 基 ...
- OC第九节——协议与代理
一.理解协议与代理 协议: 协议就是需要相互遵守的约定.规范:需要去实现协议中规定的方法. 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表).它更像是一种关系,我要 ...
- 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
本文转载至 http://blog.csdn.net/learnios/article/details/8442201 分类: 功能模块2012-12-27 10:22 109人阅读 评论(0) 收 ...
- ARP(Address Resolution Protocol)地址解析协议初识
ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议.它工作在OSI七层模型的中第二层——数据链路层. 使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址 ...
随机推荐
- python数据分析------文本挖掘(jieba)
1.import jieba jieba的cut函数有三个模式:全模式.精准模式.搜索引擎模式 1 精确模式,试图将句子最精确地切开,适合文本分析: 2 全模式,把句子中所有的可以成词的词语都扫描出来 ...
- mysql新建用户,修改权限
(1)登录:mysql -u root -p (2)查看现有用户(mysql8.0.1) mysql> select host,user,authentication_string from m ...
- OOA,OOD,OOP区别
定义: OOA(Object-Oriented Analysis,面向对象分析方法) OOD(Object-Oriented Design,面向对象设计) OOP(Object Oriented Pr ...
- 【codeforces 805A】Fake NP
[题目链接]:http://codeforces.com/contest/805/problem/A [题意] 问你在l..r这个区间内的所有数字: 对于每个数的因子; 出现次数最多的是哪一个; [题 ...
- [置顶]
QQ空间技术架构之深刻揭密
QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...
- CodeForcesGym 100548G The Problem to Slow Down You
The Problem to Slow Down You Time Limit: 20000ms Memory Limit: 524288KB This problem will be judged ...
- mysql查询优化--临时表和文件排序(Using temporary; Using filesort问题解决)
先看一段sql: <span style="font-size:18px;">SELECT * FROM rank_user AS rankUser LEFT JOIN ...
- XML概述
本节要点: 标记语言的定义 XML简介 XML与HTML 比较 XML与数据库比较 XML的特点 XML结构 1 标记语言的定义 “XML.SGML.HTML”中的“ML”(Mark ...
- POJ 2184
简单的01背包,把S看体积,把F看价值,把它们变正数处理就可以了.在处理负数时,因为减一个负数相当于加一个,所以要从前往后. #include <iostream> #include &l ...
- COCOS2DX 3.0 优化提升渲染速度 Auto-batching
COCOS2DX 3.0 优化提升渲染速度 Auto-batching 近期在看COCOS2DX 3.0的Auto-batching合批与Auto Culling动态缩减功能以下就来细致看看吧:整合好 ...