美文网首页
五种通讯方式(Block,Delegate,Notificati

五种通讯方式(Block,Delegate,Notificati

作者: SuperDKeng | 来源:发表于2016-10-20 16:41 被阅读39次

    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在消息的发送者和接收者之间建立了一个非常松散耦合。消息的接收者不知道发送者,甚至消息的发送者不需要预先知道消息的接收者。


    相关文章

      网友评论

          本文标题:五种通讯方式(Block,Delegate,Notificati

          本文链接:https://www.haomeiwen.com/subject/gopflttx.html