所以我正在使用respondsToSelector:,并且大多数时候都可以正常工作。但是有一种情况我得到错误的结果:

UIButton* button = [[UIButton alloc] init];
if([button respondsToSelector:NSSelectorFromString(@"setTitle:")]) // returns YES
{
    // try to call "setTitle:"
}


respondsToSelector:返回YES,但UIButton类中没有setTitle:选择器。有setTitle:forState:选择器,但是绝对不一样。

那么respondsToSelector:为什么返回YES?

最佳答案

对选择器的响应不仅会检查公共接口,还会采用它可以找到的任何方法。我不记得早期的UIButton API是否曾经直接公开过标题,但是在内部它可能随着状态的改变而被调用。

尝试仅对您实际需要验证存在的API使用respondsToSelector:,并请注意,通常会有私有API稍后公开,这也会引起有趣的情况...

关于ios - 对于UIButton上的“setTitle:”,responsToSelector返回YES,但是没有这样的选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29895940/

10-10 20:51