代表与协议

时间:2011-06-15 17:45:39

标签: iphone objective-c

  

可能重复:
  Difference between protocol and delegates?

协议和代表之间有什么区别吗?

如果它们相同,为什么我们需要两个做同样的事情?

何时使用委托以及何时使用协议。

我是Objective-C和Iphone编程的新手。所以请耐心等待。

2 个答案:

答案 0 :(得分:48)

协议和代理是两个相关但不同的概念:

一方面,协议声明可以由任何类实现的方法。据说这些类符合协议。它们就像Java中的 interfaces 。协议可以是formal or informal

  • 使用@protocol块声明正式协议。

  • 非正式协议可以使用@protocol块实施,所有方法均为@optional或类别为NSObject

另一方面,委托是一种设计模式,通过该模式,对象有机会对另一个对象的变化作出反应或影响其行为。基本思想是让两个对象协调解决问题,同时最小化这两个对象之间的耦合并避免子类化。子类化在子类和它的超类之间创建紧密耦合,而委托基于匿名对象创建更松散的关系。

此模式通常通过协议实现或以另一种方式实现,委托通常是符合协议的匿名对象。

答案 1 :(得分:42)

协议是类可以符合的接口,这意味着该类实现了列出的方法。可以使用conformsToProtocol:.. NSObject方法在编译时和运行时测试类是否符合协议。

委托是一个更抽象的术语,指的是代表团设计模式。使用此设计模式,类将具有它委派的某些操作(可能是可选的)。这样做可以通过允许以特定于应用程序的方式处理特定任务来创建子类化的替代方法,这将由委托实现。

它们是相关术语,因为您经常会看到为授权而创建的协议。如果我想允许委托对某些内容进行排序,我会创建一个带有所需方法的协议,例如“sortMyCoolStuff:..”,我会要求委托来实现它。这样,在支持调用委托的类中,我可以接受指向委托的指针,然后可以说“如果该委托符合myCoolProtocol,我知道它实现了sortMyCoolStuff,所以调用该方法而不是执行我的构建是安全的在行为“