繁体   English   中英

后续委托方法调用之间有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM