簡體   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