Protocol

2018/11/16 posted in  iOS

注意协议只是个声明文件,并没有实现。
谁声明,谁调用。

协议可用定义在单独.h文件中,也可用定义在某个类中:

(1) 如果这个协议只用在某个类中,应该把协议定义在该类中

(2) 如果这个协议用在很多类中,就应该定义在单独文件中

不过,如果子类自身又遵循了这个协议,但并没有实现,那么在运行时,系统会一级级往上查找,直到找到父类的方法实现。也就是说,只要知道苹果的私有方法名,并且确保自己的类是这个私有方法所属类的子类,就可以在子类中通过只声明不实现的方式执行父类中该私有方法的实现。

category

category也是一种特殊的协议,内部可以调用,外部不能调用、子类不能重写实现和重写,相当于是私有方法。

总结

协议就是定义公共接口的地方,只要遵守协议,就等于在头文件中定义了这些方法,只要实现就行了。