五种通讯方式(Block,Delegate,Notification,Target-Action,KVO)

KVO

KVO提供了这样一种机制:当对象中的某个属性值发生了改变,可以对这些值的观察者做出通知。

两个要求,首先,接收者(会接收到值发生改变的消息)必须知道发送者(值将发生改变的那个对象)。另外,接收者同样还需要知道发送者的生命周期,因为在销毁发送者对象之前,需要取消观察者的注册。


Notification(一对多,单向)

在不相关的两部分代码中要想进行消息传递,通知(notifacation)是非常好的一种机制,它可以对消息进行广播。特别是想要传递丰富的信息,并且不一定指望有谁对此消息关心。 这种消息传递机制是单向的,作为接收者是不可以回复消息的


Delegation(自定义任何方法)

delegation允许我们定制某个对象的行为,并且可以收到某些确定的事件。elegate协议可以定义任意的方法,因此你可以准确的定义出你所需要的类型。你可以用函数参数的形式来处理消息内容,delegate还可以通过返回值的形式给发送者做出回应。如果只需要在相对接近的两个模块之间进行消息传递,那么Delegation是一种非常灵活和直接方式。

Block (一次性并且能打破retain环)

一般情况下,block可以满足用delegation实现的消息传递机制.当不考虑使用block时,一般主要是考虑到block极易引起retain环。如果发送者需要reatain block,而又不能确保这个引用什么时候被nil,这样就会发生潜在的retain环。

发送的消息属于一次性的(具体到某个方法的调用),由于这样可以打破潜在的retain环,那么使用block是非常不错的选择

Target-Action(一对一,响应链)

arget-Action主要被用于响应用户界面事件时所需要传递的消息中.Target-Action在消息的发送者和接收者之间建立了一个非常松散耦合。消息的接收者不知道发送者,甚至消息的发送者不需要预先知道消息的接收者。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍: KVO -- 值改变 + 两要求 当对象中的某个属性值发生了改变,可以对这些值的观察者做出通知。 有两个要...
    钱嘘嘘阅读 1,143评论 0 9
  • 每个应用或多或少都由一些需要相互传递消息的对象结合起来以完成任务。在这篇文章里,我们将介绍所有可用的消息传递机制,...
    爱敲代码的果果阅读 4,038评论 0 2
  • 每个应用程序或多或少,都由一些松耦合的对象构成,这些对象彼此之间要想很好的完成任务,就需要进行消息传递。 本文将介...
    石丘阅读 1,756评论 4 7
  • 几种消息传递机制 首先我们来看看每种机制的具体特点。在这个基础上,下一节我...
    指尖猿阅读 403评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139