[英]What is the difference between sceneView.delegate and sceneView.session.delegate?
[英]What is the difference between following delegate method call?
我对这些委托方法调用感到困惑。
哪种方法是调用委托方法的正确方法?
@protocol XYZDelegate <NSObject>
@required
- (void)someMethod:(id)someObject;
@end
方法1:
- (void)someButtonAction:(UIButton *)sender {
if([self.delegate && [self.delegate respondsToSelector:@selector(someMethod:)]]) {
[self.delegate someMethod:sender];
}
}
方法2:
- (void)someButtonAction:(UIButton *)sender {
if([self.delegate && [self.delegate respondsToSelector:@selector(someMethod:)]]) {
[self.delegate performSelector:@selector(someMethod:) withObject:sender];
}
}
它们几乎是相同的。 它们将导致相同的结果。
第二个效率稍低。
我会改变的是线...
if([self.delegate && [self.delegate respondsToSelector:@selector(someMethod:)]]) {...
协议需要someMethod:
方法。
因此您可以将其完全删除...
- (void)someButtonAction:(UIButton *)sender {
[self.delegate someMethod:sender];
}
而且它将仍然有效。 您可以将消息发送到nil
,但它什么也不会做。 如果委托不是nil,那么根据定义它将响应选择器。
如果委托对象不符合该方法,则您将得到编译器错误(或者可能只是警告?)。
无论如何,这就足够了。
只是作为旁注。 我个人更喜欢第一种方法,如果有多个参数,则必须以这种方式调用它才能正确地传递参数。
区别在于,一个直接调用委托方法,而另一个通过performSelector
使用运行时来动态调用委托方法。
后者效率较低且毫无意义,但结果是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.