问题描述
|
这个问题已经在这里有了答案:
解决方法
协议是类可以遵循的接口,表示该类实现列出的方法。可以使用conformsToProtocol:.. NSObject方法在编译时和运行时测试类是否符合协议。
委托是一个更抽象的术语,指代委托设计彭定康。使用这种设计模式,一个类将具有某些可以委派的操作(可能是可选的)。这样做通过允许以特定于应用程序的方式处理特定任务来创建子类的替代方法,这将由委托来实现。
它们是相关术语,因为您经常会看到为授权而创建的协议。如果我想允许委托人对某些东西进行排序,我将使用列出的必需方法(例如\“ sortMyCoolStuff:.. \”)创建一个协议,并且我需要委托人来实现它。这样,在支持调用委托的类中,我可以接受指向委托的指针,然后可以说“如果该委托符合myCoolProtocol,我知道它实现了sortMyCoolStuff,那么安全地调用该方法做我内在的行为\“
, 协议和委托是两个相关但不同的概念:
一方面,协议声明了可以由任何类实现的方法。据说这些类符合协议。它们就像Java中的接口。协议可以是正式或非正式的:
正式协议以“ 0”块声明。
非正式协议可以以“ 0”块的形式实现,所有方法均为“ 2”或类别为“ 3”。
另一方面,委托是一种设计模式,通过该模式,对象可以有机会对另一个对象的更改做出反应或影响其行为。基本思想是使两个对象协调解决问题,同时最小化这两个对象之间的耦合并避免子类化。子类在子类及其超类之间创建了紧密的耦合,而委派在匿名对象的基础上创建了更为宽松的关系。
该模式通常通过协议的方式来实现,或者换句话说,委托通常是符合协议的匿名对象。