iPhone中的Delegate是什么?

13

delegate在iPhone中的确切含义是什么?它在UIViewController中如何实现?


佳能答案:https://dev59.com/pm855IYBdhLWcg3wq2TL#4213005 - Fattie
5个回答

14
代理是一个对象,通常会对另一个对象中的某些事件做出反应和/或影响另一个对象的行为。这些对象共同合作以完成任务。通常情况下,代理对象将被许多其他具有更具体任务的对象共享。代理本身将更抽象,并且应该非常适用于不同的任务。包含代理的对象通常在触发事件发生时向代理发送消息,使代理有机会执行其指定的任务。
这里还有更多的文档here,您应该阅读以了解Cocoa和Cocoa Touch中的代理模式,特别是在UIWindow和UIView之间使用委托的方式。这是iPhone架构中的一个重要设计模式,如果您希望设计一个干净的应用程序,就应该掌握它。

这里还有一个有用的链接 - 链接 - Avnish Gaur

5
委托被用于将对象的任务委托给其所有者(或任何对象)。这么做的好处是可以更容易地使用组合而非继承。委托是指向符合指定协议的对象的引用,因此您可以保证它将实现所需的方法。一个很好的例子是UIApplicationDelegate。请注意,委托方法(来自协议)使用动词applicationDid、applicationShould、applicationWill等。通常,委托方法要么请求做某事的许可(并选择以这种方式,在方法中完成,而不是仅使用BOOL属性,以获得更大的灵活性),要么通知委托即将发生或已经发生的事件。

3

委托模式就是Cocoa中的同义词。

一个代理并没有在UIViewController中实现。不同类型的视图控制器会被分配一个代理来处理某些任务。其中最好的例子(如果我们谈论的是iPhone)是UITableViewDelegate,它在发生特定表格相关事件时调用以执行某些任务。


1

代理用于在类/结构体的两个对象之间传递/通信数据以完成任务。 例如:考虑第一个VC(发送者或委托人或CEO),它向第二个VC(接收者或代表或秘书)发送机密数据。 这是通过使第二个VC符合一个协议来完成的。

protocol passDataDelegate { func passdata(data: String) }

class secondVC : UIViewController, passDataDelegate {
func passdata(data: String) {
    print("CEO passed //(data)")
   }
}

class firstVC : UIViewController {
   var delegate : passDataDelegate?
}

现在创建firstVC和secondVC的对象。保留HTML,不解释。
let sender = firstVC()
let receiver = secondVC()

由于接收器符合协议passDataDelegate,因此它的类型为UIViewControllerpassDataDelegate,因为如果一个类符合协议,则其类的对象可以具有协议作为类型。

因此,将sender.delegate = receiver分配给代表。

现在,我们的CEO(sender)可以通过其代理属性将数据传递给秘书(receiver),如下所示:

sender.delegate?.passdata("Confidential data")

Output: CEO passed Confidential data

现在,秘书(接收者)可以使用该数据来完成她的进一步任务。

0
委托的概念在iOS中非常常见。一个对象经常依赖另一个对象来协助完成某些任务。这种关注点分离将系统保持简单,因为每个对象只做它擅长的事情,并让其他对象处理其余的事情。表视图提供了一个很好的例子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接