gpt4 book ai didi

iphone - Cocoa Touch 中的委托(delegate)与事件

转载 作者:可可西里 更新时间:2023-11-01 04:11:45 25 4
gpt4 key购买 nike

我正在编写我的第一个 iPhone 应用程序,并且一直在探索 Cocoa Touch 和 Objective-C 中的设计模式。我有客户端 Web 开发的背景,所以我想全神贯注于委托(delegate)。

具体来说,我不明白为什么需要委托(delegate)对象而不是事件处理程序。例如,当用户按下一个按钮时,它会通过一个事件 (UITouchUpInside) 进行处理,但是当用户完成对文本框的输入并使用“完成”按钮将其关闭时,该操作是通过在文本框的委托(delegate) (textFieldShouldReturn) 上调用方法来处理。

为什么使用委托(delegate)方法而不是事件?我还在 View Controller 中使用 viewDidLoad 方法注意到了这一点。为什么不直接使用事件?

最佳答案

编辑:另一个好帖子: NSNotificationCenter vs delegation( using protocols )?

委托(delegate)是一个回调,因此存在 1:1 的关系。委托(delegate)是实现正式协议(protocol)的对象的单个实例。

通知(事件)基本上是向许多感兴趣的对象广播。

委托(delegate)有利于将代码插入到一些其他对象处理的管道中,例如回调之前和之后,为控件提供数据源以及在 View 之间进行通信:

What exactly does delegate do in xcode ios project?

因此,委托(delegate)与对象有着更紧密的关系,因为它们是唯一提供的对象,用于插入和更改对象的处理或提供数据。您正在推迟决策和外部操作,例如将数据加载到其他对象 - 这就是为什么它是通用 UIKit 类的一种非常常见的模式。通知其他对象是一种松散得多的关系 - 它只是通知其他人发生了某事。

这也不一定是“vs”问题。例如,您可能有一个执行后台处理的应用程序,它触发了一个更改通知,导致 View 调用其数据源委托(delegate)来刷新其 View 。它们是两种不同的机制。

关于iphone - Cocoa Touch 中的委托(delegate)与事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com