A.概念
类对象:类也是一个对象,是Class类型的对象
实例对象:创建的对象,有一个isa指针指向类
B.操作
获取内存中的内对象
1.
使用实例对象获取
Class c = [p class];
不必使用*
2.
使用类获取
Class c = [Person class];
C.类的加载
1.先加载父类,再加载子类,加载完会调用+load方法
2.类和分类的加载方法+load都会被调用
3.第一次使用类的时候,会调用+initialize方法
4.先加载父类,再加载子类,最后加载分类(依次调用+load方法),被编译就会被加载
5.先初始化父类,再初始化子类(调用+initialize方法),第一次使用的时候才会被初始化
6.类和分类的+initialize方法调用跟普通方法一样,优先调用分类的;存在多个分类并且都覆盖了+initialize方法的时候,调用最后被编译的。
—>
+load:类的加载方法===>父类、子类、分类的都会被调用
+initialize:类被第一次使用时调用的初始化方法==>父类、子类的都被调用,分类具有优先级比较
创建一个Student对象并初始化:
继承关系: NSObject -> Person -> Student -> GoodStudent
2014-11-13 23:51:16.600 06-类的本质[8205:303] Person被加载
2014-11-13 23:51:16.602 06-类的本质[8205:303] Student被加载
2014-11-13 23:51:16.602 06-类的本质[8205:303] GoodStudent被加载
2014-11-13 23:51:16.603 06-类的本质[8205:303] Student+Study被加载
2014-11-13 23:51:16.603 06-类的本质[8205:303] Student+Learn被加载
2014-11-13 23:51:16.604 06-类的本质[8205:303] Person被第一次使用
2014-11-13 23:51:16.604 06-类的本质[8205:303] Student+Learn被第一次使用
Program ended with exit code: 0
2014-11-13 23:51:16.602 06-类的本质[8205:303] Student被加载
2014-11-13 23:51:16.602 06-类的本质[8205:303] GoodStudent被加载
2014-11-13 23:51:16.603 06-类的本质[8205:303] Student+Study被加载
2014-11-13 23:51:16.603 06-类的本质[8205:303] Student+Learn被加载
2014-11-13 23:51:16.604 06-类的本质[8205:303] Person被第一次使用
2014-11-13 23:51:16.604 06-类的本质[8205:303] Student+Learn被第一次使用
Program ended with exit code: 0