代理的使用步驟
-
定義一份代理協(xié)議
- 協(xié)議名字的格式一般是:類(lèi)名 + Delegate
- 比如UITableViewDelegate
- 設(shè)計(jì)代理的細(xì)節(jié)
- 一般都是@optional(讓代理可以有選擇性去實(shí)現(xiàn)一些代理方法)
- 方法名一般都以類(lèi)名開(kāi)頭
- 比如
- (void)scrollViewDidScroll:
- 比如
- 一般都需要將對(duì)象本身傳出去
- 比如tableView的代理方法都會(huì)把tableView本身傳出去
- 必須要遵守NSObject協(xié)議(基協(xié)議)
- 比如
@protocol XMGWineCellDelegate <NSObject>
- 比如
- 協(xié)議名字的格式一般是:類(lèi)名 + Delegate
-
聲明一個(gè)代理屬性
- 代理的類(lèi)型格式:id<協(xié)議> delegate
@property (nonatomic, weak) id<XMGWineCellDelegate> delegate;
設(shè)置代理對(duì)象
代理對(duì)象遵守協(xié)議瑰妄,實(shí)現(xiàn)協(xié)議里面相應(yīng)的方法
-
當(dāng)控件內(nèi)部發(fā)生了一些事情次慢,就可以調(diào)用代理的代理方法通知代理
- 如果代理方法是@optional,那么需要判斷方法是否有實(shí)現(xiàn),直接調(diào)用可能會(huì)報(bào)錯(cuò)
if ([self.delegate respondsToSelector:@selector(wineCellDidClickPlusButton:)]) {
[self.delegate wineCellDidClickPlusButton:self];
}
iOS監(jiān)聽(tīng)某些事件的方法
-
通知(NSNotificationCenter\NSNotification)
- 任何對(duì)象之間都可以傳遞消息
- 使用范圍
- 1個(gè)對(duì)象可以發(fā)通知給多個(gè)對(duì)象
- 1個(gè)對(duì)象可以接受多個(gè)對(duì)象發(fā)出的通知
- 要求:必須得保證通知的名字在發(fā)出和監(jiān)聽(tīng)時(shí)是一致的
-
KVO
- 僅僅是能監(jiān)聽(tīng)對(duì)象屬性的改變(靈活度不如通知和代理)
-
代理
- 使用范圍
- 1個(gè)對(duì)象只能設(shè)置一個(gè)代理(假設(shè)這個(gè)對(duì)象只有1個(gè)代理屬性)
- 1個(gè)對(duì)象能成為多個(gè)對(duì)象的代理
- 使用范圍
-
如何選擇?
-
代理
比通知
規(guī)范 - 建議使用
代理
多于通知
,能使用代理盡量使用代理
-