美文网首页
傻傻分不清楚(代理,委托,协议,事件,block)

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

作者: MrOreo | 来源:发表于2016-11-11 18:17 被阅读0次

    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>方法
    • 报警器和显示器:需要实现相应的代理方法.

    相关文章

      网友评论

          本文标题:傻傻分不清楚(代理,委托,协议,事件,block)

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