Objective-C代表问题

时间:2009-09-11 03:27:30

标签: objective-c

来自参考:Can someone explain what a delegate is with an example?

NICK写道:

  

例如,A级要求您提供   代表。你告诉它[this]实例   B级会做的。

     

[setDelegate:b];

什么是 a ?它是A类的实例吗?

3 个答案:

答案 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的消息传递语法,那么在担心代理之前你应该更多地练习它。一旦你理解了消息传递,代表就会很简单。