一般情況下, 會專門寫一個public的protocol, 比如上圖中的1.
1定義的協(xié)議中的方法一般加上 @optional 必須實現(xiàn)的話就需要加@request
2和3中想要用protocol, 首先要導入1的頭文件.
以逆向傳值為例子, 2控制器中以push的方式進入3控制器, 這個里面實現(xiàn)protocol的方法.
在3委托類中調(diào)用代理
if( [self.delegate respondsToSelector:@selector(協(xié)議的方法)] ){
[self.delegate 協(xié)議的方法];
}
此時, 觸發(fā)協(xié)議的方法, 回調(diào)到2VC里面, 因為協(xié)議方法的具體實現(xiàn)是在2VC里面.
如果這個時候 發(fā)現(xiàn)無法進入3中的if語句里面, 調(diào)試之后發(fā)現(xiàn)self.delegate = nil ; 想了好久才知道, 在2中進入的3控制器的時候, 需要
3VC.delegate = self
, 將3vc的代理設置為2VC, 就可以正常運行了.