Objective-C基础语法学习笔记四
static关键字
1.static不能修饰属性,也不能修饰方法
2.static可以修饰方法中的局部变量
- (void)sayHi
{
static int num = 12;
//局部变量被static修饰后,该变量就是静态变量了,变量存放在常量区,不会被回收,二次调用时不会重复声明变量
num++;
NSLog(@"num = %d",num);
}
self关键字
当在一个方法内部定义了一个与属性名相同的局部变量,如果在方法内直接访问这个同名属性,访问到的是局部变量。
问题1:如果我想要访问那个同名属性,怎么办?
问题2:在1个对象方法中想要调用当前对象的另一个方法,怎么办?
self来解决。self指向的是当前对象。
self的使用
1.self可以访问当前对象的属性
2.self可以访问当前对象的其他对象方法
self在类方法中的使用
在类方法中self是个指针指向当前这个类在代码段中的地址。
作用:在一个类方法中调用本类的另一个类方法
取到类在代码段中的地址的方法
1.查看对象的isa指针的值
2.在类方法中查看self的值
3.调用对象的对象方法class 就会返回这个对象所属类在代码段中的地址
4.调用类方法class 就会返回这个类在代码段中的地址
继承
继承是类在继承而不是对象在继承,子类继承父类就拥有了父类的所有成员包括属性和方法。
继承的特点
1.单根性:一个类只能有一个父类,不能有多个父类(一个亲爹)
2.传递性:A从B继承,B从C继承,A同时拥有B和C的成员
注意:子类中不能定义父类中同名属性
子类对象调用父类的方法,通过子类对象中的isa指针指向父类,父类通过isa指针指向祖宗类,一层层遍历查找调用的方法,一直找到NSObject类,没有就会报错。
NSObject类
是Fundation框架中的类,是OC的祖宗类,在这个类中有一个类的方法new,用于创建对象的,方法的返回值是创建这个对象的指针。
super关键字
1.super可以用在类方法和对象方法之中
2.在对象方法中可以使用super关键字调用当前对象从父类继承过来的对象方法
3.在类方法中super关键字可以调用当前类从父类继承过来的类方法
4.super不能访问属性
5.super是指当前类或者对象的这个方法是从父类中继承过来的
访问修饰符
用来修饰属性,可以限定对象的属性的访问范围
1.@private:私有。被修饰的属性只能在本类的内部访问,只能在本类的方法实现中访问
2.@protected: 受保护的。被修饰的属性只能在本类和本类的子类中访问,只能在本类和子类的方法实现中访问。
3.@package:被package修饰的属性可以在当前框架中访问
4.@public:可以在任何地方访问
子类可以继承父类的私有属性,但在子类中无法直接访问从父类继承过来的私有属性
私有方法
只写实现不写声明,就可以实现该方法只能在本对象方法中调用。
里氏替换原则
表现形式:一个父类指针指向子类对象的地址
description方法
使用%@打印一个对象
输出格式是: <对象所属的类名:对象的地址>
NSLog函数的底层逻辑:
1.调用传入的对象的description方法
2.拿到这个方法的返回值 这个返回值是1个字符串
3.将这个字符串输出
description方法是定义在NSObject类之中的,每一个OC对象都有这个方法
多态
指同一个行为,对于不同的事物具有完全不同的表现形式。同一个行为有多种形态。