目标-C-类别和协议的目的

我一直在阅读Objective-c协议和类别,对我来说都显得毫无意义。 它们都用于以一些有趣的方式添加事件到程序中,而不是仅仅手动添加它。

我可能会相信看到这个协议的目的是为了让你可以检查id的types,但是这真的是关于它的。 我看不到其他真正的用途。

至于类别,我真的不明白你为什么不把它们添加到代码。 为什么你需要手动指定你将要实现的类别中的方法,而不是只是正常地执行? 是不是你可能想做一个“子类”,但稍作修改? 为什么不只是创build一个子类呢?

我真的没有看到这些的目的,我希望有人能告诉我他们真正的用途= /

先谢谢了,基督徒

类别是添加方法到你的源不可用的类,比如所有的Apple类(那些以NS,CG,CA等开头的类),而不需要子类。

协议的目的是定义遵守协议的类必须实现的方法。 在Java中,这些被称为接口。 目的是将非兄弟类(相同超类的子类)之间的相似性编码在一起。 假设你有一个classChair和一个class级Petrol 。 除了它们都遵循flammable议定书,它们没有很多共同之处,这就要求它们有一定的方法,比如specificEnergy flamingPointflamingPoint

现在你的Fire类可以有一个方法addFlammableMaterial:(id <flammable>)material

通常使用协议来声明某些类的实例可以是某些其他实例的委托。 你可以声明你的视图控制器作为UITableView的数据源,声明它符合UITableViewDataSource协议,这意味着你的viewController保证它实现了该协议所需的方法,并且tableView可以安全地rest,因为它可以信任VC是它的数据源。

类别是向现有类的所有实例添加新方法而不修改类本身的一种方法。

对于类别阅读已经讨论过的SOpost,

Objective-C中的inheritance和类别有什么区别?

协议抗类

经常使用协议来指定委托对象的接口。

协议声明可以由任何类实现的方法。 协议在至less三种情况下是有用的:

 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中的接口一样工作。 你可以用一些方法定义协议,然后在许多类中实现它。 每个类都可以有不同的协议提供的方法实现,但是接口是一样的。 例如:你想计算不同types的员工的工资,例如。 FullTimeEmployeeContractEmployee 。 您可以将calculateSalary方法定义放在协议中,并在这两个类中提供不同的实现。 一个将返回固定工资,而另一个将返回基于工作时间的工资。 然后,您可以将每个类实例转换为协议types,并调用给定的方法来获得适当的结果。

如果你想扩展一个不属于你的类,比如在内置类的情况下,类别是有帮助的。 NSString 。 你可以添加一个像reverse这样的方法来得到反转的string。 为什么不做一个子类? 因为您可以在修改的类上调用您的自定义方法,而无需将types引用。

协议是一种将代码合约应用于类的方式,就像接口在Java和C#中工作的方式一样。

类别有助于扩展不能直接修改的类,它们与C#中的扩展方法非常相似。

分类可以用来为现有的类添加function,比如所有的NS …类。 你不能直接添加代码。

当你在协议中调用一个方法时,协议被用来指定某个类实际上做了些什么。