Objective-C respondToSelector

Objective-C respondToSelector,第1张

概述从我迄今为止所学到的东西:在Objective-C中,您可以向任何对象发送任何消息。如果对象确实实现了正确的方法,它将被执行,否则将不会发生。这是因为在发送消息之前,Objective-C将执行respondToSelector。 我希望我是对的。 我做了一个小程序来测试每次移动滑块时哪个动作被调用。另外为了测试我将发件人设置为NSButton,但实际上它是一个NSSlider。现在我问对象是否会 从我迄今为止所学到的东西:在Objective-C中,您可以向任何对象发送任何消息。如果对象确实实现了正确的方法,它将被执行,否则将不会发生。这是因为在发送消息之前,Objective-C将执行respondToSelector。

我希望我是对的。

我做了一个小程序来测试每次移动滑块时哪个动作被调用。另外为了测试我将发件人设置为NSbutton,但实际上它是一个NSSlIDer。现在我问对象是否会响应setAlternateTitle。而NSbutton会做,NSSlIDer不会。如果我运行代码,并且自己做了respondToSelector,它会告诉我对象将不会响应该选择器。如果我测试像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"];}

但是当我实际发送setAlternateTitle消息时,程序会崩溃,我不知道为什么。在发送消息之前不应该做一个respondToSelector吗?

解决方法 首先,方法的名称(其选择器)包括所有子部分和冒号字符,如mvds所述。

其次,方法-respondsToSelector:不被运行时调用,它通常由用户(自己或想要知道代理的API是否响应协议的可选方法)来调用。

当您向对象发送消息时,运行时将在对象的类中(通过对象的isa指针)查找方法的实现。这相当于发送–respondsToSelector:虽然消息本身没有被分派。如果在类或其超类中找到方法的实现,则会使用传入的所有参数调用该方法。

如果没有,则运行时给予消息第二次机会被执行。它将通过将消息(BOol)resolveInstanceMethod 总结

以上是内存溢出为你收集整理的Objective-C respondToSelector全部内容,希望文章能够帮你解决Objective-C respondToSelector所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1039220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存