iOS代理的目的是什么?

我明白了委托在iOS中做了什么,我已经看过示例代码,但是我只是想知道这种封装types的优点(而不是在主对象中包含委托方法)。

委托是一种devise模式,不仅在iOS中使用,而且在许多其他语言中使用 它使您能够在类层次结构中传递值和消息。

代表devise模式的优点是松耦合。 它使得类A(委托)能够依赖于类B(委托类),而类B不必具有类A的任何知识。这确保了依赖关系是单向的,而不是循环的。

它还构成了苹果框架的基础(小写“f”),因为它允许在需要特定于您的应用程序的function时适当地调用您的代码。 例如,响应button点击或告诉表格视图应该有多less部分。

在iOS中,委托需要“委托”类来实现包含“委托”知道的方法的协议。 还在继续?

委托类的实现将调用这些协议方法,但委托类将在他们的类中实现这些方法。

这使您的类清洁。

实际上,如果您可以将新方法添加到单个类中,您并不需要授权。 但是对于UIKIT的UIView类,Apple不会允许你为他们的类添加新的实现。

如我错了请纠正我。

iOS中委托最常见的用途是在不相关或部分相关的模块之间build立通信。 例如,在UINavigationController中传递数据是很容易的,我们可以使用segue。 但是,向后发送数据有点棘手。 在这种情况下,我们可以使用委托向后发送数据。

让我们调用与第一个控制器ClassA和类相关联的类,它与第二个控制器ClassB相关联。 第一个控制器连接到第二个控制器,具有正向延时。 我们可以通过这个segue将ClassA中的数据传递给ClassB。 现在,我们需要将一些数据从ClassB传递给我们可以使用委托的ClassA。

发送者类(ClassB)需要在其头文件(.h)中有一个协议,并且还需要在块的@interface ClassB …. @end中引用它作为委托。 这个引用让ClassB知道它有一个委托。 任何想要使用这个ClassB的类都必须实现所有这个协议所需的方法(如果有的话)。 因此,接收者类ClassA将实现该方法,但是该调用将由发送者类ClassB进行。

这样,接收者类不需要担心发送者类的内部结构,并且可以接收到所需的信息。

委托只是iOS应用程序对象之间的通信手段。 您可以将代表团视为连接对象并相互沟通的简单方法。 换句话说,我们可以说,当任何事件发生时,委托允许一个对象发送消息给其他对象。

让我们通过一个真实的例子来理解这个。

假设有5个柜台的办公室。 你进入办公室,到柜台1并在柜台上提交一些细节。 现在你的细节需要通过计数器3知道的一些过程,但计数器1不知道。 所以计数器1会告诉你等待一段时间,把你的细节传给计数器3来完成这个过程。 在这种情况下,计数器3是处理事件的代理,由计数器1引用。计数器3完成处理数据后,它将消息发送回计数器1,通知过程已完成,现在可以继续。

代表团据我所知,当一个对象将处理事件的责任传递给另一个对象,从而将责任“委托”给该对象。

例如,如果你在iOs中有一个NSButton,你通常会把Delegate赋值为父视图控制器。 这意味着代替在button的定义中处理touchUp事件,而是在视图控制器中处理。

委托的主要优势是简单地在“主要对象”(我假定你指的是进行委托的对象)中实现方法,这是委托使用dynamic绑定。 在编译时,委托对象的类不需要知道。 例如,您可能有一个代表windowDidMove:方法的类。 在这个类中,你可能会看到一些类似的代码

 if([[self delegate] respondsToSelector:@selector(windowDidMove:)]) { [[self delegate] windowDidMove:notification]; } 

在这里,委托类正在运行时检查它的委托是否响应给定的方法select器。 这说明了一个强大的概念:委托类不需要知道任何有关委托,而不是它是否响应某些方法。 这是一种强大的封装forms,由于委托者和委托是如此松散耦合的,所以它可以说比超类 – 子类关系更灵活。 最好简单地在“主对象”(委托对象)中实现方法,因为它允许运行时改变方法的实现。 这也是有争议的,这个dynamic运行时会使代码本质上更危险。

委托是iOS应用程序的重要devise模式。所有应用程序直接或在幕后使用此委托模式。 委托devise模式允许对象代表另一个对象进行操作。 如果我们正在使用tableview,那么有“ tableViewDelegate ”和“ tableViewDataSource ”。 但这是什么意思

假设你有一个tableview。 现在对此有一些主要的关注。 1.这个tableview的数据源(将出现在表视图中的数据)是什么? 2.表格视图等多less行代表devise模式使用另一个对象作为这些问题的提供者或解决者来解决这些问题。 一个物体将自己标记在桌子的视图上,并通过将自己标记为桌子视图的代表来确保桌子的视图是“ 是的,我是能帮助你的人 ”。 谢谢

委托意味着一个对象将行为传递给另一个对象。

标记为委托的类负责处理发生某些事件时发送的callback。 例如,在UITextField的情况下,当编辑开始,编辑结束,字符types等发生某些事件时,会调用一些方法,这些方法已经在协议中定义。 我们将不得不为此分配委托,即哪个类将处理这些事件。

在代表的帮助下,可以实现双向沟通。 可以使用委托来使对象可重用,以提供发送消息的灵活方式或实现定制。