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