tag: C # , iOS
總結(jié)C#中的觀察者模式(利用委托<delegate>和事件<event>(即委托的方法))
VS
iOS中使用代理和block的通知機(jī)制(利用代理<delegate>和協(xié)議<protocol>).
類比:四個(gè)步驟
代理方法的聲明 <==> 委托方法的聲明 <==> block方法的聲明
代理類型的聲明 <==> 事件的聲明 <==> block類型的聲明
代理方法的調(diào)用 <==> 委托方法(事件)的調(diào)用 <==> block的調(diào)用
代理方法實(shí)現(xiàn) <==> 注冊(cè)實(shí)現(xiàn)方法 <==> block的實(shí)現(xiàn):給block賦值操作
- 重點(diǎn): 代理方法傳遞的參數(shù) <==> 事件中的參數(shù) <==> block中的參數(shù)
block的回調(diào)信息類似于 C#中的 參數(shù)引用類型為out類型,最后在實(shí)現(xiàn)處要獲取該傳遞的值;
block的實(shí)質(zhì):將本工具類的信息,傳遞給外界使用.因此將重要信息作為參數(shù)
舉例子:熱水器加熱水的操作:
- 熱水器進(jìn)行燒水,水溫度升高;
- 報(bào)警器觀察到水到95°時(shí)候,發(fā)出報(bào)警的聲音;
- 顯示器顯示水燒開后的溫度變化情況;
- C#中三者之間的關(guān)聯(lián)就是水的溫度(temperature);
- 因此熱水器作為事件的發(fā)起者,需要傳遞'temperature'這個(gè)重要的變量;
- 而報(bào)警器和顯示器則作為監(jiān)視者,事件的接收者;因此需要將對(duì)熱水器進(jìn)行注冊(cè)事件,以便能夠及時(shí)通知接收者作出相應(yīng)的操作處理;
- iOS中協(xié)議方和遵守協(xié)議方關(guān)聯(lián)的也是溫度(temperature)
- 熱水器:定義一種協(xié)議<protocol>,協(xié)議中包裹著代理<delegate>方法
- 報(bào)警器和顯示器:需要實(shí)現(xiàn)相應(yīng)的代理方法.