2.Category、Extension、Protocol
2016-11-30 本文已影响6人
Roader
一 . Category分类
1. 为什么用分类:是一个子类化替代方案。解决通过父子类继承关系来扩充方法造成的代码高耦合问题。
2. 分类作用:给本类扩充方法(增加功能),但不能扩充属性(用property关键字定义属性,只会生成getter和setter方法);父类的分类方法会被子类继承。
3. 应用场景:
(1)给类扩充方法(比如扩展系统类);
(2)对庞大的类进行分功能分模块开发;
(3)SDK编写时用分类隐藏私有方法。
4. 注意点:第一,用分类去重写类的方法,仅对本Category有效,不会影响到其他类与本类的关系;第二,如果子类和子类的分类都实现了父类方法,那调用顺序是分类 -> 子类 -> 父类,但是苹果文档不建议这么做,要重写方法应该使用继承实现。
二 . Extension类扩展
1.定义:又称作匿名分类,是分类的一个特例。
2.作用:写在.m文件中,为本类扩充私有属性和方法。
3.注意:
1)不需创建新文件,直接在原类的.m文件中添加属性和方法。
2)所谓私有方法只能本文件调用,外部文件里无法调用。
4.格式:
@interface 类名( )
属性.......
@end
@implementation 类名( )
方法.......
@end
三 . Protocol协议
1. 协议:在OC的类中让没有继承关系的类之间产生联系。任何类只要遵守该协议,就能实现协议中定义的方法;协议还可以用于定义对象能够发送哪些消息(通过设置遵守协议的属性)。协议让OC支持了多重继承部分特性(通过方法声明)。
协议本质时一系列方法的声明,是开发中的向上抽象思想的产物。
2. 注意:
(1)只要遵守了某协议,就必须实现@required方法;
(2)协议本身可以遵守其他协议;
(3)子类会继承父类遵守的协议;
(4)和分类一样,协议内不能加属性。