0

通过委托或创建实例调用函数与调用 tomethod 有什么区别:

例如,我可以使用下一个方法

ViewC1.m

-(void) doSomthing{
}


viewC2.m

viewC1 *myInterface = [[viewC1 alloc] init];
[myInterface doSomthing];

或使用协议创建委托......并像这样使用它:

viewC2.m

[self.delegate doSomthing];
4

2 回答 2

0

假设有两个类 ViewC1 和 ViewC2。如果要从 ViewC1 向 ViewC2 发送消息,并从 ViewC2 向 ViewC1 接收回调消息。最好使用协议进行此对象通信。如果您为此对象通信使用实例方法,您将限制 ViewC2 回调指定对象(在本例中为 ViewC1)。为了让 ViewC2 能够回调任何对象。您可以在 ViewC2 上定义协议。并让其他想要接收回调的对象符合它。

于 2012-10-06T11:15:19.990 回答
0

这主要是您尝试实现的设计模式的问题。委托允许您在类之间创建不太明确的链接。来自 Apple 的The Objective-C Programming Language

“协议将方法声明从对类层次结构的依赖中解放出来,因此它们可以以类和类别不能使用的方式使用。协议列出了在某处(或可能)实现的方法,但实现它们的类的身份不是兴趣。”

因此,要回答您的问题,只要self.delegate存在和实现doSomthingviewC1实例实现,就结果而言没有区别doSomthing。但在不了解更广泛背景的情况下,很难说更多关于相对优势的信息。我已经阅读了 Objective-C 协议和 Cocoa 框架中大量使用的委托模式,以便更好地了解何时使用这种模式。在这种情况下效仿苹果。

(顺便说一句,在 Objective-C 中,它是“方法”而不是“函数”......)

于 2012-10-06T10:41:43.947 回答