基本上我要问的是,什么是代表,但我也一直在使用它?
代表们的逻辑流程是什么?我需要很好地解释一些事情,因此我的许多谷歌搜索和搜索网站都显示了它们的用途,但实际上并不是如何使用它们。
我有一个有委托的类,你可以调用一个函数请求委托作为参数。我应该做什么,在我的班级中构建一个重复的委托,传递它然后它们被链接?对于愚蠢的人的一些真正基本的解释将非常感激!
谢谢!
答案 0 :(得分:1)
代理接收来自“委托”给他们的其他对象的消息,并对其进行操作。
我们以UITableView
为例。它有一个UITableViewDelegate
,其中要求另一个对象如何对某些事情采取行动,例如行高。
答案 1 :(得分:1)
委托是一组在一个单独的类中组合在一起的回调函数。为了帮助您理解一下,假设这个方法签名:
-[Foo doStuffWithInteger:(int)foo thenExecute:void (^block)(Foo*)]
(你知道块,对吗?)文档会告诉一旦方法的主要算法完成后,它将回调(执行)传递的块。
委托模式较旧,并且做的事情略有不同。使用委托模式,Foo
类将改为使用这两种方法:
-[Foo setDelegate:(id)delegate]
-[Foo doStuffWithInteger:(int)foo]
doStuffWithInteger
对象不是在Foo
末尾调用块,而是调用委托上的方法。这意味着委托必须实现-[??? foo:(Foo*) completedStuffWithInteger:(int)]
类能够使用的某种方法,例如Foo
。需要回调的所有方法可能会在委托上调用不同的方法。
Objective-C中的委托通常允许您为类实现自定义行为,而无需对它们进行子类化。例如,CALayer
的委托可以实现draw:inContext:
方法,该方法在需要绘制图层时调用,并将为图层提供内容。
由于Objective-C是duck-typed,因此可以使用任何实现委托方法的类。
答案 2 :(得分:0)
基本上委托是id类型的变量,它们与协议“耦合”,这非常类似于Java或C#接口,除非协议可以指定您不必实现的可选方法。
因此,为了使用一个将作为委托的类实现这样的协议:
.h file:
MyClass <TheProtocol>
.m file
- (void)theMethodToImplement
{
//The implementation
}
之后,必须通常像这样设置具有委托变量的类:
theDelegateClass.delegate = self;
之后,“委托类”可以调用其他类上的已实现方法,如下所示:
[delegate theMethodToImplement];
对于不在关键字@optional
之下的任何方法,您可以安全地执行此操作,对于在关键字@optional
下面声明的协议中的方法,您应首先检查委托是否决定实施像这样的方法:
if ([delegate respondsToSelector:@selector(theOptionalMethod)])
[delegate theOptionalMethod];