29.self和super
OC提供两个保留字self和super,用于在方法定义中引用执行该方法的对象。
OC语言中的self,就相当于C++、Java中的this指针。
super发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修改或将它添加到现有的方法中,仍然可以将原始的方法纳入到修改后的方法当中。
①self的应用场景
1)用在类方法中;
2)用在对象方法中;
3)访问成员变量;
4)self在OC的内存管理特殊使用;
self在对象方法中使用,调用的是当前对象方法的那个对象
self在类方法中使用,调用的一定不是当前创建的对象,而是类对象。
[p class]返回的实质就是当前类(类对象)。
self = 该类
②总结:
1)谁调用当前方法,self就代表谁;
2)self在对象方法中,self代表当前对象;
3)self在类方法中,self代表类;
4)[self 方法名称]; //调用其他方法(类方法、对象方法)
5)self可以简单理解为指自己;
30.继承
派生类方法属性 = 基类方法属性 + 派生类自己新增的方法和属性
①注意:
1)基类的私有属性不能被继承,不能被使用;
2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类;
3)继承的合理性;
4)子类不能定义和父类同名的变量,但是可以继承父类的变量;
5)OC支持单一继承,不支持多继承;
6)OC支持多层继承;
7)子类可以继承父类所有的实例变量的属性和方法,但是,不是所有的都能访问!
8)在@interface和@end之间默认的修饰符是@protected
②继承体系中方法调用的顺序
1)在自己类找;
2)若没有,在父类中找;
3)若父类也没有,就去父类的父类找;
4)....一直向上层找,直到找到基类(NSObject);
5)如果NSObject都没有就报错了
31.重写
把父类的方法,在子类中重新给实现了,这种做法就称之为:方法的重写。
32.实例变量修饰符
① @public(公开的):在有对象的前提下,任何地方都可以直接访问
② @protected(受保护的):只能在当前类和子类的对象中使用
③ @private(私有的):只能在当前类的对象中使用
④ @package(框架级别的):作用域介于私有和公开之间,只要处于同一个框架中都可以直接通过变量名访问
33.OC中的私有方法
在.h中没有声明,在.m中实现,此时该方法被成为私有方法。不能在其他类中访问。
34.description
description方法是基类NSObject所带的方法,因为其默认实现时返回类名和对象的内存地址。
但是,我们经常会重写description,覆盖description的默认实现。
有两种重写description一种时实例方法,一种是类方法
例如:
//重写
-(NSString *) description{
return [NSString stringWithFormat:@"数组1:%d,数字2:%d,结果:%.2f",_num1,_num2,_result];
}
//调用:
NSLog(@"%@",cal);
35.多态
多态就是某一类事物的多种形态。
①程序中的多态:不同的对象以自己的方式响应相同名称方法的能力成为多态;
②多态的条件
1)有继承关系、有方法重写;
2)父类的声明变量指向子类对象;
③多态的优点
多态的主要好处就是简化了编程接口,它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程借口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
36.类的本质
①
②获取类对象
//通过类名获取类对象
Class c1 = [Person Class];
//通过实例对象来获取类对象
Person *p1 = [Person new];
Class c2 = [p1 Class];
37.SEL
SEL:全称为selector,表示方法的存储位置。
Person *p2 = [Person new];
[p2 test];
//手动地把test方法包装成SEL类型
SEL s2 = @selector(test);
[p2 performSelector:s2]; //等同于[p2 test];