Category(分类/类目)、Protocol(协议)、Extension(扩展/延展)

Category(分类/类目):
利用Objective-C的动态运行时分配机制,Category提供了一种比继承更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的class添加方法,包括那些没有源代码的类。(只能新添加方法)
注意:
(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。
(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。

Protocol(协议):
类似C++中的虚类,只负责声明,不负责实现。其他子类继承该虚类,需要实现虚类中的方法。
特点:协议多用在许多类同时使用相同的方法而且这些代码重复性很大的情况下,它会把这些重复的代码提炼出来放在一个协议里,供大家使用。它确实有些类似于java中的接口和C++中的纯虚函数的抽象类,它提供协议的规则,使用者只有遵从协议的规则才能使用它所提供的方法。当然这些方法在协议中它只是帮助进行了声明,并没有任何的实现。当使用者遵从这个协议并使用它的方法时,如果在类声明文件中方法都是默认的或者是@required时,那么在类实现文件中必须全部地实现这些方法。如果是@optional标记的,使用者可以选择性的实现,视情况而定。

Extension(扩展/延展):
匿名的Category(特殊的)。类有时需要一些只为自己所见的私有方法,这种私有方法可以通过延展的方式来声明,定义的方法在类本身的@implementation代码区域中进行实现。
与Category不同的地方:可增加私有属性,声明的方法必须实现。作用:将方法变为类的私有方法。 它只有.h文件 (可以添加方法和实例变量)
注意:在类别(Category)中只能添加方法,方法都是公有的;在类扩展(Extension)中,既可以添加方法,也可以添加实例变量,但是添加的内容都是类私有的,只能在类的内部访问。

猜你喜欢

转载自blog.csdn.net/qq_31709953/article/details/90731773