gpt4 book ai didi

iphone - delegate 在 xcode ios 项目中到底做了什么?

转载 作者:太空狗 更新时间:2023-10-30 03:10:07 25 4
gpt4 key购买 nike

我刚刚开始学习 iPhone 应用程序开发,但我很难理解委托(delegate)的真正含义?谁能举例说明它的作用和重要性?感谢您的帮助!

最佳答案

这是一个需要从概念上理解的关键概念,因此在了解技术细节之前先思考如何思考它很重要。简单地说,委托(delegate)就是回调。

使用委托(delegate)的两个主要场景:

  1. 类或控件想要抽象出有关如何工作(如检索数据)的细节。
  2. 允许其他人将代码 Hook 到管道中。

例子:UITableView - 表格 View 只是一个知道如何呈现单元格列表的控件。它处理渲染、滚动等所有繁重的工作……但是,它不知道如何加载您的数据。所以你实现了一个数据源委托(delegate),它有方法来获取给定行的单元格数据等......这对你来说很容易。您只需使用控件并插入数据的细节。 UITableView 会为你做所有的事情……只需回答几个具体的问题。一位委托(delegate)回答了这几个具体问题。

一个文本控件——你将一个文本控件添加到你的 View 中,瞧!你可以输入它,一切都很好。但是,如果您想在他们开始打字或打完字后做点什么怎么办?好吧,文本控件提供了一个委托(delegate),其中包含允许您挂接到文本控件的执行管道的方法。它允许文本控件为您做任何事情,并允许您在需要的地方插入代码。很多时候,有办法插入代码来决定是否允许某些事情。控件会回调并询问,我应该可以做 x 吗?您可以插入代码并影响行为。

如果您正在创建一个控件或类,您可以创建自己的协议(protocol)、数据源委托(delegate)等...这样您的控件就可以专注于做所宣传的事情。例如,假设您想创建一个任务控件。你可以:

首先,创建一个合约。嘿,如果你要为我的控制提供数据,这些就是我要问你的问题。我会从那里开始...在这种情况下,我会问你任务的数量,然后你会根据行号给我一个任务。

@protocol XXTaskBoardDelegate <NSObject>
-(NSInteger*)getTaskCount;
-(XXTask*)getTaskForRow:(NSInteger*)rowNumber;
@end

在控件或类中,为消费者提供一种方法来为我们提供将回答控件将提出的问题的委托(delegate)数据源类。此时,该控件是一个纯控件。它对您如何获取数据一无所知。它要求一个实现契约(Contract)/协议(protocol)的对象 (id)。编号

@implementation XXTaskBoard
- (void)setDelegate:(id<XXTaskBoardDelegate>)newDelegate
{
// the control stores the delegate so it can callback and ask you questions.
}

然后,对于委托(delegate)类,在 header 中声明您实现该正式协议(protocol)并在实现 m 文件中提供代码。

@interface AppController : NSObject<XXTaskBoardDelegate> 
{
//...
}

然后在实现中实现

@implementation AppController
- (NSInteger*)getTaskCount
{
return [model queryTaskCount];
}

- (XXTask*)getTaskForRow:(NSInteger*)rowNumber
{
return [[model tasks] getItem:(NSInteger*)rowNumber];
}

关于iphone - delegate 在 xcode ios 项目中到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215698/

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