一般情况下, 会专门写一个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, 就可以正常运行了.