Objective-c-类别和协议的目的

| 我一直在阅读Objective-c协议和类别,对我来说这似乎毫无意义。它们都用于以某种有趣的方式将内容添加到程序中,而不仅仅是手动添加。 我可能会说服该协议的目的,以便您可以检查id的类型,但是确实如此。我认为它们没有其他实际用途。 至于类别,我真的不明白为什么不将它们添加到代码中。为什么您需要在将要实现的类别中手动指定方法,而不是通常这样做?您是否想做一个“子类”,但稍作修改?为什么不只是创建一个子类? 我真的看不到这两个的目的,希望有人能告诉我他们的实际用途= / 提前致谢, 基督教     
已邀请:
        类别是将方法添加到您的源不可用的类中,例如所有Apple类(以NS,CG,CA等开头的类),而无需对其进行子类化。 协议的目的是定义必须遵守该协议的类的方法。在Java中,这些称为接口。目的是将非同级的类(同一超类的子类)之间的相似性进行整理。假设您有一个类别“ 0”和一个类别“ 1”。它们都没有太多共同点,只是它们都遵循
flammable
协议,这要求它们具有某些方法,例如
specificEnergy
flamingPoint
。 现在,您的
Fire
类可以具有方法
addFlammableMaterial:(id <flammable>)material
。 协议通常用于声明某些类的实例可以作为某些其他实例的委托。您可以通过声明它符合to8ѭ协议来声明它作为
UITableView
的数据源,这意味着viewController保证它实现了该协议所需的方法,并且tableView可以安全地休息,因为它可以信任VC为其数据源。     
        类别是一种向现有类的所有实例添加新方法而无需修改类本身的方法。 对于类别,请阅读已经讨论过的SO帖子, Objective-C中的继承和类别有什么区别 协议对类别 协议经常用于指定委托对象的接口。 协议声明可以由任何类实现的方法。协议至少在以下三种情况下有用:
To declare methods that others are expected to implement
To declare the interface to an object while concealing its class
To capture similarities among classes that are not hierarchically related
阅读更多协议使用。     
        协议就像Java中的接口一样工作。您可以使用某些方法定义协议,然后在许多类中实现它。这些类中的每一个都可以具有协议提供的方法的不同实现,但是接口将是相同的。例如:您要计算不同类型员工的工资,例如。
FullTimeEmployee
ContractEmployee
。您可以在协议中放入“ 12”方法定义,并在这两个类中提供不同的实现,例如。一个将返回固定工资,而另一个将根据工作时间返回工资。然后,您可以将每个类实例转换为协议类型,并调用接收适当结果的给定方法。 如果您要扩展不属于您的类,例如内置类,例如ex,则类别很有用。
NSString
。您可以添加类似“ 14”的方法来获取反向字符串。为什么不做一个子类呢?因为您可以在修改后的类上调用自定义方法,而无需强制转换对您类型的引用。     
        协议是将代码协定应用于类的一种方式,与接口在Java和C#中的工作方式几乎相同。 类别对于扩展无法直接修改的类很有用,它们与C#中的Extension方法非常相似。     
        类别可用于向现有类(例如所有NS ...类)添加功能。您不能直接向其中添加代码。 当您在协议中调用方法时,协议用于指定某个类实际上在做什么。     

要回复问题请先登录注册