代理的使用步驟
- 定義一份代理協(xié)議
- 協(xié)議名稱:類名+delegate
- 細(xì)節(jié):
- optional
- 方法名一般以類名開頭
- 一般都需要將對象本身傳出去
- 比如tableView的代理方法歌溉,當(dāng)用戶點(diǎn)擊加號(hào)虐杯,就知道用戶點(diǎn)擊的是哪一行的加號(hào)
- 必須要遵守基協(xié)議
- 聲明一個(gè)代理屬性
- id<協(xié)議>delegate
- 設(shè)置代理
- 遵守協(xié)議
- 實(shí)現(xiàn)協(xié)議方法
- 當(dāng)控件內(nèi)部發(fā)生了一些事情哺哼,就可以調(diào)用代理的代理方法杉武,通知代理
- 調(diào)用代理的代理方法,通知代理【self.delegate 代理方法:self】
- 如果是optional需要判斷一下有沒有這個(gè)代理方法
iso監(jiān)聽某些事件的方法
-
通知
- NSNotificationCenter | NSNotification
- 任何對象之間都可以傳遞消息
- 使用范圍:
- 一個(gè)對象可以發(fā)通知給多個(gè)對象
- 一個(gè)對象可以接受多個(gè)對象發(fā)出的通知
- 要求:必須保證通知的名字在發(fā)出和監(jiān)聽的時(shí)候是一致的
-
KVO
- 僅僅是能監(jiān)聽對象屬性的改變(靈活度不如通知和代理)
-
代理
- 使用范圍
- 一個(gè)對象只能設(shè)置一個(gè)代理(假設(shè)一個(gè)對象只能設(shè)置一個(gè)代理屬性)—— 設(shè)計(jì)角度
- 一個(gè)對象能成為多個(gè)對象的代理(控制器)
- 使用范圍
-
如何選擇做裙?
- 一般來說习瑰,只想監(jiān)聽某個(gè)對象屬性值的改變,就用KVO
- 通知和代理抡笼,一般來說苏揣,會(huì)選擇代理,代理相對于通知要規(guī)范一些推姻,因?yàn)橥ㄖ幸粋€(gè)要求腿准,發(fā)出通知和監(jiān)聽通知的名字要一致,假設(shè)發(fā)布名字發(fā)生改變拾碌,就監(jiān)聽不到了吐葱。
- 通知的好處:簡單易用,代理相對比較麻煩
- 代理比通知規(guī)范
- 能用代理就用代理
- 同時(shí)通知多個(gè)對象的時(shí)候校翔,就不能用代理了弟跑,只能使用通知