iOS 为什么delegate是nil

iOS 为什么delegate是nil_第1张图片
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, 就可以正常运行了.

你可能感兴趣的:(iOS 为什么delegate是nil)