所以我正在使用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?
答案 0 :(得分:1)
响应选择器并不只是检查公共接口,它会采取它可以找到的任何方法。我不记得UIButton
的早期API是否直接暴露了标题,但在内部它可能被称为状态变化。
尝试仅对您实际需要验证的API使用respondsToSelector:
,并注意通常会有私有API,后来公开,这也会导致有趣的情况......
答案 1 :(得分:0)
Alexandr,只有在想要检查某个对象是否实现了您要调用的方法时,才应使用此“respondsToSelector”方法。并且为了设置Button Title,为什么要求你使用它?
您应该使用此方法,通常使用自定义委托方法..