我刚开始学习目标 C,我似乎不太了解协议。我对 Objective-C 中的协议的理解是,您指定一些方法定义而无需实际为其编写代码。这意味着,无论谁决定继承我的类,都必须实现我所需的所有方法。
我的问题是,协议是否会产生额外的开销,而这并不是真正需要的。如果我在我的新类中需要一个方法,我可以实现它。为什么我需要从协议继承?
为什么我不能忽略使用协议而只根据需要创建方法。
我刚开始学习目标 C,我似乎不太了解协议。我对 Objective-C 中的协议的理解是,您指定一些方法定义而无需实际为其编写代码。这意味着,无论谁决定继承我的类,都必须实现我所需的所有方法。
我的问题是,协议是否会产生额外的开销,而这并不是真正需要的。如果我在我的新类中需要一个方法,我可以实现它。为什么我需要从协议继承?
为什么我不能忽略使用协议而只根据需要创建方法。
除此之外,协议是让编译器帮助您避免常见错误的一种方式。在这种情况下,您可以指定一个类将调用另一个类(通常是委托)的特定方法。然后编译器将检查以确保其他类(委托)实际实现了这些方法,如果没有,则给您一条警告消息。由于未定义的选择器(方法),在编译时获取消息比在运行时崩溃更可取。
我的问题是,协议是否会产生额外的开销,而这并不是真正需要的。
没有额外的开销。
如果我在我的新类中需要一个方法,我可以实现它。为什么我需要从协议继承?
好吧,如果这是满足您需求的理想路径,您当然可以为您的通用实现声明一个子类。如果您尝试这样做,您可能会遇到我在下面概述的问题。
协议经常被使用,因为它们不是实际的物理类型。它是方法和/或其他协议的接口。通常,它们既小又专业。由于 objc 不提供多重继承,因此协议对于短扩展非常方便。
查看作为复杂子类并继承一个或多个协议的类型;举NSString <NSCoding, NSCopying, NSMutableCopying, NSObject>
个例子。知道 objc 使用单继承,请考虑如何实现此类并从所有这些协议“继承” - 然后考虑在为所有 Foundation 类型实现此之后传递这些类型时它对客户端的影响。类层次结构和接口变得非常混乱。许多类中的变体数量将爆炸式增长,以容纳所有这些类型作为参数。大多数人会在那之前停下来,然后放弃类型安全——这也是一个非常糟糕的主意。使用协议,您可以在一个简单的语言功能中“实现此接口”和类型安全(多重继承很快变得非常难看)。