为什么我真的需要使用协议

时间:2012-07-18 03:58:37

标签: objective-c ios

  

可能重复:
  Understanding @Protocols in Objective-C
  Objective C protocols usage

我刚开始学习目标C而且我似乎并没有很好地理解协议。我对Objective-C中Protocols的理解是,你指定了一些方法定义,而没有实际为它编写代码。这意味着,无论谁决定继承我的班级,都必须实施我所需要的所有方法。

我的问题是,协议是否创造了额外的开销,而这并不是真正需要的。如果我在新课程中需要一个方法,我可以实现它。为什么我需要继承协议?

为什么我不能忽略使用协议,只是根据需要创建方法。

2 个答案:

答案 0 :(得分:1)

除其他外,协议是一种让编译器帮助您避免常见错误的方法。在这种情况下,您可以指定一个类将在另一个类(通常是委托)上调用特定方法。然后编译器将检查以确保其他类(委托)实际实现这些方法,如果没有,则给出警告消息。由于未定义的选择器(方法),在编译时获取消息比在运行时崩溃更好。

答案 1 :(得分:0)

  

我的问题是,协议不会产生额外的开销,而这并不是真正需要的。

没有额外的开销。

  

如果我在新课程中需要一个方法,我可以实现它。为什么我需要继承协议?

好吧,如果这是满足您需求的理想路径,您当然可以为常用实现声明一个子类。如果你试试这个,你可能会遇到我在下面概述的问题。

经常使用

协议,因为它们不是实际的物理类型。它是方法和/或其他协议的接口。通常,它们很小而且专业。由于objc不提供多重继承,因此协议对于简短扩展非常方便。

查看复杂子类的类型并继承一个或多个协议;以NSString <NSCoding, NSCopying, NSMutableCopying, NSObject>为例。知道objc使用单继承,考虑如何实现这个类并从所有这些协议中“继承” - 然后考虑在为所有Foundation类型实现此类之后传递这些类型时它将对客户端产生的影响。类层次结构和接口变得非常混乱。许多类中的变化数量会爆炸以容纳所有这些类型作为参数。大多数人会在那之前停下来,只是放弃类型安全 - 这也是一个非常糟糕的主意。使用协议,您可以“实现此接口”并在一个简单的语言功能中输入安全性(多重继承很快就会变得非常丑陋)。