gpt4 book ai didi

ios - 协议(protocol)和委托(delegate)到底是什么,它们在 IOS 中是如何使用的?

转载 作者:IT王子 更新时间:2023-10-29 08:04:27 25 4
gpt4 key购买 nike

我对委托(delegate)和协议(protocol)的概念真的很困惑。它们等同于 Java 中的接口(interface)和适配器类吗?它们是如何工作的?到目前为止,我读过的所有资源都没有帮助。“委托(delegate)是一种简单而强大的模式,其中程序中的一个对象委托(delegate)另一个对象或与另一个对象协作。委托(delegate)对象保留对另一个对象(委托(delegate))的引用,并在适当的时间发送消息对它。”我不知道这是什么意思。有人可以解释一下它们是什么并举一个简单的例子吗?提前致谢!

编辑:

据我所知,

1) 委托(delegate)实现协议(protocol)(接口(interface)的另一个名称)

2) 对象注册一个委托(delegate)(实现协议(protocol))

3) 对象可以在委托(delegate)上调用协议(protocol)方法

因此,委托(delegate)将对象与协议(protocol)连接起来。

如有错误请指正

我还是不明白为什么对象本身不能实现一个协议(protocol)?本来可以简单得多!

最佳答案

协议(protocol)是一种指定您希望某个类实现的一组方法的方法,如果它想与您的一个类一起工作的话。 UITableViewDelegate 和 UITableViewDataSource 等委托(delegate)和数据源确实是协议(protocol)。

您以这种方式指定协议(protocol):

@protocol MyProtocol <NSObject>

- (void)aRequiredMethod;

@required
- (void)anotherRequiredMethod;

@optional
- (void)anOptionalMethod;

@end

在@required 之后或任何其他说明符之前声明的方法是必需的,并且想要使用您的协议(protocol)的类需要实现所有这些方法。您还可以通过在 @optional 说明符之后声明一些可选方法来声明它们。

然后您可以在类的接口(interface)中指定类“符合”协议(protocol)(实现所需的方法):

@interface MyClass <MyProtocol>

@end

您通常使用属性保留对符合协议(protocol)的对象的引用。例如,要跟踪委托(delegate):

@property (nonatomic, weak) id<MyProtocol> delegate;

此时,在您的代码中,您只需调用要在您保持引用的对象上调用的方法,并像使用任何其他方法一样实现您的协议(protocol):

[self.delegate aRequiredMethod];

检查一个对象是否符合你可以调用的协议(protocol)

[self.delegate conformsToProtocol:@protocol(MyProtocol)]

检查对象是否实现了可以调用的方法

[self.delegate respondsToSelector:@selector(anOptionalMethod)]

有关更多信息,请查看 Apple 指南 Working With Protocols .

关于ios - 协议(protocol)和委托(delegate)到底是什么,它们在 IOS 中是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192287/

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