![](/img/trans.png)
[英]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.