根据我到目前为止所学到的:在Objective-C中,您可以向任何对象发送任何消息.如果对象确实实现了正确的方法,那么它将被执行,否则不会发生任何事情.这是因为在发送消息之前,Objective-C将执行respondsToSelector.
我希望到目前为止我是对的.
我做了一个小程序来测试每次移动滑块时调用动作的位置.同样用于测试我将发送者设置为NSButton但实际上它是NSSlider.现在我问对象是否会响应setAlternateTitle.虽然NSButton会这样做而NSSlider不会.如果我运行代码并自己执行respondsToSelector,它会告诉我对象不会响应该选择器.如果我测试像intValue这样的东西,它会响应.所以到目前为止我的代码很好.
- (IBAction)sliderDidMove:(id)sender
{
NSButton *slider = sender;
BOOL responds =
[slider respondsToSelector:@selector(setAlternateTitle)];
if(responds == YES)
{
NSLog(@"YES");
}
else
{
NSLog(@"NO");
}
[slider setAlternateTitle:@"Hello World"];
}
Run Code Online (Sandbox Code Playgroud)
但是当我实际发送setAlternateTitle消息时,程序将崩溃,我不确定为什么.它不应该在发送消息之前执行respondsToSelector吗?