Static关键字:
C语言中:
1、修饰局部变量。
将局部变量变成1个静态变量,并将这个变量存储在常量区,当函数执行完毕后,不会被回收,下次再执行的时候不会声明而是直接可以使用。
2、修饰全局变量。
只能在当前模块中访问。
3、修饰函数。
只能在当前模块中访问。
OC中:
static不能修饰属性,也不能修饰方法。
Static可以修饰方法中的局部变量。
将局部变量变成1个静态变量,并将这个变量存储在常量区,当函数执行完毕后,不会被回收,下次再执行的时候不会声明而是直接可以使用。
Self关键字:
与JAVA、C#的this类似。代表当前对象、当前类。
Self是1个指针:
1、在对象方法中使用时:
self指针指向当前对象。可以使用self访问当前对象的属性,可以用来调用当前对象的其他对象方法,但此时self不能用来调用类方法,类方法只能用类来调用。
2、在类方法中使用时:self指针指向当前类 。只能调用类方法或调用当前类的其他类方法,不能使用slef访问属性和调用对象方法。因为在调用的时候对象还没有被创建、成员变量也没有产生,所以没法访问属性和对象。
Super关键字
1、对象方法中,只能用来调用当前子类对象从父类继承过来的对象方法,此时虽然可以用self调用,但为了提高代码的阅读性,建议使用super来调用。
2、类方法中,super代表父类,用来调用父类的类方法。
3、super可只能用来调用方法,不能用来访问属性。
继承:
A类中定义了一些成员(属性),B类刚好拥有A类的全部成员,此时B类可以继承A类,如:
Person类:
属性:姓名、性别、年龄、身高、体重。
行为:走路、吃饭、睡觉。
Student类:想拥有Person类的全部属性及行为,就可以继承Person类。
此时:Student是Person的子类,Person是Student的父类。
@interface Student :Person
{
属性;
}
方法声明;
@end
@implementation Student
方法实现;
@end
语法:
@interface 子类类名 :父类类名
{
属性;
}
方法声明;
@end
@implementation 子类类名
方法实现;
@end
使用继承的注意事项:
1、target之间是相互独立的,不能在1个target中去访问另外1个target。
2、是类在继承,不是对象在继承。
3、当多个类具有相同的成员的时候,就可以将相同的成员定义在1个类中,用作父类。其他分别继承它。
4、继承需要满足is a的关系才能确立继承关系,不要为了继承而继承。做到物以类聚、人以群分,如对象学生就不能作为狗类的子类,电脑与车……
5、只要某个成员不是所有子类拥有的,那么这个成员就不应该定义在父类中。
6、继承特点:单根性、传递性。单根性,1个类只能有1个父类;A类继承B类,B类继承C类,那么此时A类就同时拥有B、C类中的所有成员,A只会比B、C的成员多不会少。
7、子类中不允许出现和父类同名的属性。
NSObject类
是所有OC类的基类,为了保证我们的类拥有创建对象的能力,那么我们的类必须直接或间接的从NSOject类继承。
访问修饰符:
特点:访问修饰符是用来修饰类的属性的
作用:用来限定对象的属性可以在什么地方可以访问。
@private:
私有的被其修饰的属性只能在本类中的内部访问,子类可以继承父类的私有成员,但是却不能访问所继承过来的父类的私有成员。
@protected:
受保护的 被其修饰的属性,只能在本类和本类的子类中访问。
@public:
公开的 被其修饰的属性,可以在任意的地方通过对象进行访问。
@package:
包权限 被其修饰的属性,只能在当前框架中访问。
私有属性和私有方法:
将属性真正的私有,Xcode中不提示。只能在类的内部访问,外部不提示。
在声明时,如果在大括弧中使用@private的话,虽能做到私有化,但是其他对象访问是有提示的,只是不能用而已,想要达到Xcode不提示的效果就是不写声明,只写实现,这样这个属性只能在类的内部调用。
多态:
多种形态。方法的多种表现形式,即同一种行为,对于不同的对象具有不同的表现形式。子类对父类的方法重写,但不需重新声明。
遵从里氏替换原则,子类可以替换父类的位置,并且程序的功能不受影响。
父类的指针指向子类对象,父类的指针可以存储本类的地址,也可以存储子类的地址;
当方法的参数是1个父类类型的时候,传递实参是可以给父类对象传递也可以给子类对象传递。
唯一要注意的就是:当1个父类的指针指向1个子类的时候,只能通过这个指针访问子类对象的父类成员。