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