通过委托或创建实例调用函数与调用 tomethod 有什么区别:
例如,我可以使用下一个方法
ViewC1.m
-(void) doSomthing{
}
viewC2.m
viewC1 *myInterface = [[viewC1 alloc] init];
[myInterface doSomthing];
或使用协议创建委托......并像这样使用它:
viewC2.m
[self.delegate doSomthing];
通过委托或创建实例调用函数与调用 tomethod 有什么区别:
例如,我可以使用下一个方法
ViewC1.m
-(void) doSomthing{
}
viewC2.m
viewC1 *myInterface = [[viewC1 alloc] init];
[myInterface doSomthing];
或使用协议创建委托......并像这样使用它:
viewC2.m
[self.delegate doSomthing];
假设有两个类 ViewC1 和 ViewC2。如果要从 ViewC1 向 ViewC2 发送消息,并从 ViewC2 向 ViewC1 接收回调消息。最好使用协议进行此对象通信。如果您为此对象通信使用实例方法,您将限制 ViewC2 回调指定对象(在本例中为 ViewC1)。为了让 ViewC2 能够回调任何对象。您可以在 ViewC2 上定义协议。并让其他想要接收回调的对象符合它。
这主要是您尝试实现的设计模式的问题。委托允许您在类之间创建不太明确的链接。来自 Apple 的The Objective-C Programming Language:
“协议将方法声明从对类层次结构的依赖中解放出来,因此它们可以以类和类别不能使用的方式使用。协议列出了在某处(或可能)实现的方法,但实现它们的类的身份不是兴趣。”
因此,要回答您的问题,只要self.delegate
存在和实现doSomthing
和viewC1
实例实现,就结果而言没有区别doSomthing
。但在不了解更广泛背景的情况下,很难说更多关于相对优势的信息。我已经阅读了 Objective-C 协议和 Cocoa 框架中大量使用的委托模式,以便更好地了解何时使用这种模式。在这种情况下效仿苹果。
(顺便说一句,在 Objective-C 中,它是“方法”而不是“函数”......)