来自参考:Can someone explain what a delegate is with an example?
NICK写道:
例如,A级要求您提供 代表。你告诉它[this]实例 B级会做的。
[setDelegate:b];
什么是 a ?它是A类的实例吗?
答案 0 :(得分:1)
使用方括号将消息发送到使用Objective-C的对象。
你有实例方法,它们在方法的返回类型之前用 - (减号)符号表示,如下所示:
- (void)setDelegate:(id <SomeDelegateProtocol>)delegate;
或者你有用+(加号)符号表示的类方法:
+ (NSArray *)arrayWithObject:(id)object;
括号内的第一个文本代表该消息的接收者,如果是实例消息,则它将是一个对象指针。否则,当您处理类消息时,请使用它的名称类。
所以 a 确实是一个实例的指针,可能是A类(实际上,它实际上只是对象所赋予的变量的名称。它可以是任何类)。
答案 1 :(得分:0)
这个例子假设我们有两个类,A类和B类,并且我们每个都有一个实例; a
是A的实例,b
是B的实例:
ClassA *a = [[[ClassA alloc] init] autorelease];
ClassB *b = [[[ClassB alloc] init] autorelease];
我们还假设A类具有某种委托变量,并且方法setDelegate:
更改了该变量的值。通常,委托是一个对象的实例,它接收有关另一个对象活动的消息或以某种方式定义其行为。因此,例如,如果类A具有某种方法doFoo
,则类B可能具有委托方法a:didFoo:
,只要它执行Foo就会从类A调用。
但是在委托能够实现其目的之前,接收消息的对象必须知道它有一个委托。因此,我们必须使用类A的setDelegate:
方法将类B的实例设置为类A的委托:
[a setDelegate:b];
答案 2 :(得分:0)
简短的回答是:
是
希望能够解决问题。 对于更长的答案,请参阅Tim&amp; JoostK。
如果你不熟悉Obj-C的消息传递语法,那么在担心代理之前你应该更多地练习它。一旦你理解了消息传递,代表就会很简单。