我希望我是对的。
我做了一个小程序来测试每次移动滑块时哪个动作被调用。另外为了测试我将发件人设置为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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)