gpt4 book ai didi

ios - 下面的委托(delegate)方法调用有什么区别?

转载 作者:行者123 更新时间:2023-11-29 00:40:35 28 4
gpt4 key购买 nike

我对这些委托(delegate)方法调用感到困惑。

调用委托(delegate)方法的正确方法是什么?

@protocol XYZDelegate <NSObject>

@required
- (void)someMethod:(id)someObject;
@end

方法一:

- (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: 方法是协议(protocol)所必需的。

所以你可以完全删除它......

- (void)someButtonAction:(UIButton *)sender {
[self.delegate someMethod:sender];
}

它仍然有效。您可以向 nil 发送消息,它不会执行任何操作。如果委托(delegate)不是 nil,那么根据定义它将响应选择器。

如果委托(delegate)对象不符合该方法,那么您将得到一个编译器错误(或者可能只是一个警告?)。

无论如何,这应该足够了。

作为旁注。我个人更喜欢第一种方法,如果有多个参数,那么您必须以这种方式调用它才能正确传递参数。

关于ios - 下面的委托(delegate)方法调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39619196/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com