所以我正在使用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/