po [self.delegate respondsToSelector:@selector(xxx)] nil

po [self.delegate respondsToSelector:@selector(xxx)] nil

一直没有发现的一个问题,今天在调试代码的时候发现,代理指针是有的,但是就是不执行代理方法。

检查来,检查去发现没有什么地方不对劲啊,但是奇怪的是有些代理方法可以正常回调,有些代理方法不被self.delegate响应,这是什么原因呢?

对比了以下可以响应和不能响应的方法发现,原来不执行代理方法回调,或者说po [self.delegate respondsToSelector:@selector(xxx)]的时候是nil,是因为xxx方法在签协议的类里没被实现。

一直以来,认为只要有代理指针,签了协议,self.delegate就会响应代理方法,即以下一定是会被执行。

[self.delegate respondsToSelector:@selector(xxx)]

今天才发现错了,也是挺nc的。对比输出看下结果

(lldb) po [self.delegate respondsToSelector:@selector(xxxx:xxxx)]
 nil
(lldb) po [self.delegate respondsToSelector:@selector(xxxx:xxxx)]
0x0000000000000001

想想也是理所当然的,如果签协议的类没有实现代理类的代理方法,po [self.delegate respondsToSelector:@selector(xxx)]为nil,或者说是不响应该方法,不就本来应该这样吗。想想也是很nc呢。

猜你喜欢

转载自blog.csdn.net/morris_/article/details/79963913