How EXACTLY do I use a class that has a delegate in it
本质上,我要问的是,什么是代表,但我到底该如何使用代表?
委托的逻辑流程是什么?我需要很好的解释,所以我在这个网站上的许多谷歌搜索和搜索都揭示了它们的用途,但并不是真正的如何使用它们。
我有一个在中有委托的类,您可以调用的函数要求委托作为参数。我应该做什么,在我的类中构造一个重复的委托,传递它,然后它们被链接?对于那些愚蠢的人来说,一些真正基本的解释是值得赞赏的!
谢谢您!
委托是在一个类中组合在一起的一组回调函数。为了帮助您理解,假设此方法签名:
1 | -[Foo doStuffWithInteger:(int)foo thenExecute:void (^block)(Foo*)] |
(你知道街区,对吧?)文档会告诉我们,一旦方法的主要算法完成,它将回调(执行)传递的块。
委托模式比较旧,并且做的事情略有不同。对于委托模式,
1 2 | -[Foo setDelegate:(id)delegate] -[Foo doStuffWithInteger:(int)foo] |
Objective-C中的委托通常允许您实现类的自定义行为,而不必对它们进行子类化。例如,
由于objective-c是duck类型的,所以可以使用实现委托方法的任何类。
委托接收来自其他"委托"对象的消息,并对其进行操作。
以
基本上,委托是类型ID的变量,这些变量称为"耦合",它与一个非常类似Java或C接口的协议无关,除非协议可以指定不需要实现的可选方法。
因此,为了使用一个类,委托将实现如下协议:
1 2 3 4 5 6 7 8 9 10 | .h file: MyClass <TheProtocol> .m file - (void)theMethodToImplement { //The implementation } |
之后,通常需要像这样设置具有委托变量的类:
1 | theDelegateClass.delegate = self; |
在此之后,"委托类"可以对其他类调用实现的方法,如下所示:
1 | [delegate theMethodToImplement]; |
对于任何不低于关键字
1 2 | if ([delegate respondsToSelector:@selector(theOptionalMethod)]) [delegate theOptionalMethod]; |