0

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

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

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

那么为什么respondsToSelector:返回YES呢?

4

2 回答 2

1

响应选择器不只是检查公共接口,它会采用它可以找到的任何方法。我不记得早期的 APIUIButton是否直接公开了标题,但在内部它可能会随着状态的变化而被调用。

尝试仅respondsToSelector:用于您实际需要验证存在的 API,并注意通常有私有 API 稍后公开,这也可能导致有趣的情况......

于 2015-04-27T13:04:43.680 回答
0

Alexandr,只有当你想检查一个对象是否实现了你要调用的方法时,你才应该使用这个“respondsToSelector”方法。而对于设置按钮标题,为什么你需要使用这个?

通常,您应该使用此方法,您正在使用自定义委托方法。

于 2015-04-27T13:05:18.253 回答