首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >委托在objective-C中是如何工作的?

委托在objective-C中是如何工作的?
EN

Stack Overflow用户
提问于 2009-06-25 19:35:51
回答 5查看 50.3K关注 0票数 50
  1. 有人知道我在哪里可以找到关于应用程序委托在objective-C中的工作方式以及什么是工作的很好的解释/教程吗?
  2. 我有两本书对delegates的阐述不够,也没有很好地解释它们,让我无法真正理解它们的功能和功能。
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-25 19:47:18

如果有疑问,请检查docs

基本上,委托是一种允许对象之间进行交互而不会在它们之间创建强烈的相互依赖关系的方法,因为这会降低应用程序的设计灵活性。它们可以有一个代理,而不是对象之间的控制,它们向代理发送(或委托)消息,代理做他们所做的任何事情,以便对此消息做出响应和操作,然后通常将某些内容返回给另一个对象。

委托也是子类化的一种更好的选择。您不必创建自己的自定义类来稍微改变其他对象的行为方式,或者向它们传递数据,委托允许对象向它们的委托发送消息来为它们做工作,而不需要创建子类来对其他对象进行细微的更改。

当然,委派的主要缺点是,可用的委派方法取决于Apple工程师预见的有用内容,以及他们期望人们需要的常见实现,这对您可以实现的内容施加了限制。虽然,正如Quinn Taylor指出的那样,这是特定于Cocoa框架的,因此并不适用于所有情况。

如果委托是比子类化更好的选择,那么就使用它,因为它是管理代码和对象之间交互的一种更干净的方式。

票数 79
EN

Stack Overflow用户

发布于 2012-10-11 15:03:21

如上所述,委托不是iOS或Objective-C的特性,而仅仅是一种编程技术,不需要特定的语言支持。

一个类(例如,g,classA)可以这样写:它的getData和doSomething方法不是由它自己实现的,而是由一个委托实现的(可能是因为classA不知道数据是什么,或者它必须做什么)。

为此,classA提供了一个属性,通常称为委托( delegate )(它只是一个指向实现委托方法的类的指针),然后,当它想要调用这些方法时,它实际上调用了委托中的方法:

代码语言:javascript
复制
[self.delegate getData];

代码语言:javascript
复制
[self.delegate doSomething];

可以将self.delegate初始设置为self

代码语言:javascript
复制
self.delegate = self;

也就是说,classA实现了它自己版本的这些方法,除非它们是委托的。

任何其他类,想要成为方法的实现者(即成为委托并可能覆盖classA的默认实现),都会首先将classA的委托设置为自身。因此,在classB中,如果classB想要成为这些方法的代理,我们需要:

代码语言:javascript
复制
classA.delegate = self;

因此,当classA调用这些委托的方法时,它实际上是在调用classB来实现这些方法,而不知道任何关于classB的事情,甚至不知道它是否存在,classB也不需要子类classA。

限制是classB只能覆盖classA想要委托的方法-通过子类化,您可以覆盖任何方法。

协议用于通过定义方法列表来正式化委托过程,这些方法的必须由委托()实现(委托者不提供方法的默认版本,方法必须在某个地方实现),或者可以由委托(即,委托者有其自己的版本,或者方法不实现也无关紧要)来实现。

票数 22
EN

Stack Overflow用户

发布于 2011-07-19 07:33:02

委托是一种设计模式;没有特殊的语法或语言支持。

委托只是一个对象,当某些事情发生时,另一个对象会向其发送消息,以便代理可以处理应用程序特定的细节,而原始对象并不是为此而设计的。这是一种无需子类化就可以自定义行为的方法。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1045803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档