1.类的本质
类本身也是一个对象,是Class类型的对象,简称“类对象”,我的理解是每个类都是一个对象,类型是Class,就像新建一个Person类,可以初始化很多对象,而这些对象的类型是Person;
Class类型的定义:typedef struct objc class *Class;初始化的Class类型的对象本身就是个指针,所以初始化的时候前面不用加*。
类名就代表着类对象,每个类只有一个类对象。
2.类的加载和初始化
1>加载
在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法
//当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后会调用+load方法
+ (void)load
{
NSLog(@"Person---load");
}
//当第一次使用这个类的时候,就会调用一次initialize方法
+ (void)initialize
{
NSLog(@"Person-initialize");
}
在每个类的.m文件中都加上这个段代码,在没有初始化对象的情况下运行的结果是
所以每次程序启动的时候会加载所有类和分类的+load方法,并且是先加载父类,最后加载分类
2>初始化
在第一次使用某个类时就会调用一次+initialize方法,并且一个类只会调用一次+initialize方法,先调用父类,再调用子类,下面测试:
还是刚才的代码,不过这次要创建一个GoodStudent对象
还有如果父类有分类,并且分类也重写了+initialize方法,那么就不会调用父类的+initialize方法