多态
一、概念
多态:不同的对象以自己的方式响应消息的能力叫做多态。
在ios开发中,每个类都有自己对应的名字空间,这使得多态成为可能,不同类中定义相同的名字并不会冲突,类的实例方法和类方法有如下特点:
1、类的实例变量也位于该类独有的名字空间
2、类中的方法也同样为约该类独有的名字空间,所以两个不同类可以实现相同的方法
方法作为对象的接口,对象收到消息的名字就会调用方法的名字,同样的消息发给不同的对象,导致的操作并不相同
二、多态的优点
多态的主要好处就是简化了接口,多态可以使类和类之间可以重用一些习惯性的命名。
注意:oc支持方法名的多态,但不支持参数和操作符的多态
三、多态的实现
在Objective-C 中多态是由方法选取器selector来实现的,选取器的特点:
1、所有同名的方法拥有相同的选取器
2、所有的选取器是不一样的
SEL和@selector:
选择器的类型是SEL,@selector 指示符用来饮用选择器,返回类型是SEL;
@selector() 通过方法名来得到选取器
NSSelectorFromString()可以通过字符串来得到选取器
NSStringFromSelector()通过选取器来得到方法名
注:选取器确定的事方法名,而不是方法的实现。是多态性和动态绑定的基础
继承:继承在面向对象语言是非常重要的。在iOS中继承是单继承,既只能有一个父类。在继承中,子类可以使用父类的方法和变量,子类可以重写父类方法 。父类也可以访问子类的方法和成员变量;
分类: iOS中,当原有类的方法不够用时,这时候分类就出现了。category是在现有类的基础上添加新的方法,利用objective-c 的动态运行时分配机制,可以为现有类添加新方法。可以在分类中添加方法和成员变量,但是添加的成员变量不会自动生成setter和getter方法,需要在实现部分给出实现。
拓展: iOS中的extension就是匿名的分类,只有头文件没有实现文件。只能扩展方法,不能添加成员变量。扩展的方法只能在原类中实现。例如你扩展NSString,那么你只能在NSString的.m实现(这是不可能的),所以尽量少用扩展。用分类就可以了。