傻傻分不清楚(代理,委托,协议,事件,block)

tag: C # , iOS

总结C#中的观察者模式(利用委托<delegate>和事件<event>(即委托的方法))
VS
iOS中使用代理和block的通知机制(利用代理<delegate>和协议<protocol>).

类比:四个步骤

代理方法的声明   <==>    委托方法的声明      <==>  block方法的声明
代理类型的声明   <==>  事件的声明         <==>  block类型的声明
代理方法的调用   <==>   委托方法(事件)的调用  <==>  block的调用
代理方法实现     <==>    注册实现方法       <==>  block的实现:给block赋值操作
  • 重点: 代理方法传递的参数 <==> 事件中的参数 <==> block中的参数

block的回调信息类似于 C#中的 参数引用类型为out类型,最后在实现处要获取该传递的值;
block的实质:将本工具类的信息,传递给外界使用.因此将重要信息作为参数

    举例子:热水器加热水的操作:
    - 热水器进行烧水,水温度升高;
    - 报警器观察到水到95°时候,发出报警的声音;
    - 显示器显示水烧开后的温度变化情况;

  1. C#中三者之间的关联就是水的温度(temperature);
  • 因此热水器作为事件的发起者,需要传递'temperature'这个重要的变量;
  • 而报警器和显示器则作为监视者,事件的接收者;因此需要将对热水器进行注册事件,以便能够及时通知接收者作出相应的操作处理;

  1. iOS中协议方和遵守协议方关联的也是温度(temperature)
  • 热水器:定义一种协议<protocol>,协议中包裹着代理<delegate>方法
  • 报警器和显示器:需要实现相应的代理方法.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,169评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,211评论 30 472
  • 与君共勉二十载 问君归期未有期 微君冷暖未回信 谈君日常无所知 此君留之何用 弃之无谓 我自洒脱看世界 愿君相忘于...
    闲人的博文路阅读 519评论 2 1
  • 彼此并不是我们的第一要义 否则你必不可能安睡 否则我必不可能安睡 你习惯回避 我不屑追究 燃烧一瞬间熄灭一瞬间 或...
    一团无知的肉阅读 241评论 0 1