tag: C # , iOS
总结C#中的观察者模式(利用委托<delegate>和事件<event>(即委托的方法))
VS
iOS中使用代理和block的通知机制(利用代理<delegate>和协议<protocol>).
类比:四个步骤
代理方法的声明 <==> 委托方法的声明 <==> block方法的声明
代理类型的声明 <==> 事件的声明 <==> block类型的声明
代理方法的调用 <==> 委托方法(事件)的调用 <==> block的调用
代理方法实现 <==> 注册实现方法 <==> block的实现:给block赋值操作
- 重点: 代理方法传递的参数 <==> 事件中的参数 <==> block中的参数
block的回调信息类似于 C#中的 参数引用类型为out类型,最后在实现处要获取该传递的值;
block的实质:将本工具类的信息,传递给外界使用.因此将重要信息作为参数
举例子:热水器加热水的操作:
- 热水器进行烧水,水温度升高;
- 报警器观察到水到95°时候,发出报警的声音;
- 显示器显示水烧开后的温度变化情况;
- C#中三者之间的关联就是水的温度(temperature);
- 因此热水器作为事件的发起者,需要传递'temperature'这个重要的变量;
- 而报警器和显示器则作为监视者,事件的接收者;因此需要将对热水器进行注册事件,以便能够及时通知接收者作出相应的操作处理;
- iOS中协议方和遵守协议方关联的也是温度(temperature)
- 热水器:定义一种协议<protocol>,协议中包裹着代理<delegate>方法
- 报警器和显示器:需要实现相应的代理方法.