delegate(代理)是什么?
A需要完成某事情,但是自己不想/自己不能完成,那怎么辦?
- 那么他將需要完成此事的條件列出來(協(xié)議)
- A設置個“代理屬性”
- 其他任何人,只要滿足條件(遵循代理協(xié)議),并告訴A,誰幫他做這事就行了(為A的代理屬性,設置代理對象)!
delegate的使用
以UIScrollView為例子,需要獲取當內容滾動時,獲取contentOffSet(偏移量)
- 遵守代理,協(xié)議<UIScrollViewDelegate>
- 代理屬性,UIScrollView里面的代理屬性
@property (nonatomic, weak, nullable) id <UICollectionViewDelegate> delegate; - 代理對象
用當前控制器為,代理對象!self.scrollView.delegate = self; - 實現(xiàn)代理方法
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; //用戶開始拖拽時調用的代理方法
delegate做什么用?(解耦)
- 監(jiān)聽事件
scrollView發(fā)生某個事件時 --> 通知代理對象的某個方法
代理對象的某個方法,監(jiān)聽到scrollView的某個事件(狀態(tài)發(fā)生改變), --> 采取自己想要的行動 - 返回數據
注意:
@optional - (可選),@required -(必須)修飾的方法區(qū)別?
?被@optional修飾的方法可以實現(xiàn),也可以不實現(xiàn)
?被@required修飾的方法,必須實現(xiàn)