刘小汶

路漫漫其修远兮,吾将上下而求索。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
类本质的东西
  1. 类也是一个对象;
  2. Person对象的类型是Class类型,Class里面包含了*
  3. 类本身也是对象,是个Class类型的对象;简称类对象;
  4. 利用Person类对象 创建Person类型的对象;
  5. 利用Class类型创建Person类对象;
  6. //获取内存中的类对象
  7. Class c = [p class];
  8. Class c2 = [p2 class];
  9. 也可以用Person类来获取类对象;
  10. Class c3 = [Person Class];
  11. 我们要查看p和p2的类对象,就是利用类方法class获得,c和c2的类对象都是Person类,而Person类本身就是Class类型;
  12. class类型的数据就是class对象;class是一个类方法;
  13. 如果本身是指针,就不需要加&就可以打印地址;如果不是指针类型,就用&取地址;
  14. 类对象 == 类;
  15. 一个类也可以叫类对象,因为它本身也是通过Class类创建出来的;如
  16. Person *p = [[Person alloc]init];
  17. Class c = [p class];
  18. [c test];
  19. c *p2 = [[c new]init];
  20. 上面的语句都是成立的,
 
类的加载过程;
  1. 不掌握这个东西也可以开发;
  2. 下面的操作都是会先调用父类的方法;
  3. load是程序启动的时候调用;initialize是第一次使用类的时候调用;
  4. 调用子类的过程,会先调用父类的方法;如有3个类,a是父类,b是a的子类,c是b的子类,那么第一次使用b类的时候,会先加载3个类的load方法;然后调用父类的initialize的方法,再调用b类的initialize的方法;
  5. 如果有分类,就先调用分类的initilize方法;
  6. 当程序启动的时候,就会加载一次项目中所有的类,类加载完毕后就会调用+load方法
  7. + (void)load
  8. {
  9. }
  10. 当第一次使用这个类的时候,就会调用一次initialize方法;
  11. + (void)initialize
  12. {
  13. }
  14. 总结:
  15. 当程序启动是,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次。
  16. 当第一次使用某个类时,就会调用当前类的+initialize方法;
  17. 先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
  18. 先初始化父类,在初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
  19. 先加载父类,再加载子类;
  20. 先加载父类,再加载分类;
  21. Class c = [Person class];
  22. Person *p2 = [c new];
posted on 2016-04-08 23:45  williamliuwen  阅读(395)  评论(0编辑  收藏  举报