A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JRayln 中级黑马   /  2015-3-30 09:19  /  934 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类的本质:
         类也是一个对象
         一个类在内存中只有一块存储空间,类是一个类对象(用Class类型创建出来的对象)
         例如:Person类,是class类型的对象,简称类对象
         步骤:
                   Class类,创建Person类对象
                   Person类对象,创建Person类型的对象
                   Person *p = [[Person alloc]init];
                   [p class];---->获取内存中的类对象
                   Class c = [p class];--->c就是内存中的Person
                   Class c2 = [p class];--->cc2是相同的
注意:Class c是一个指针类型的变量,Class包含*
         当输出二者地址时,可验证是否相同:
                   NSLog(@"c=%p,c2=%p", c, c2);--->地址是相同的
         第二种方式获取内存中的类对象:
                   Class c3 = [Person class];
备注:类对象==类,类==类对象
          Class c = [p class];--->c是一个类对象,可以调用类方法
类的加载和初始化:
         Student Person--->先加载父类,再加载子类
         + (void)load;--->在类被加载的时候调用,且类只能加载一次
         main函数中使用到了Student类时--->[[Student alloc] init]
         + (void)initialize;
         备注:
                   当程序一启动时,就会加载一次项目中所有的类和分类,且类加载完毕后,就会调用+ (void)load          方法
                   当第一次使用某一个类时,就会调用该类的+ (void)initialize方法(先调用父类的该方法)
         备注:
                   当程序中存在分类,那么会调用分类中+ load方法
         注意:
                   main函数中使用到Person类,优先调用其分类的+ initialize方法,如果分类没有,那么
                   调用类的,类的没有,再调用父类的
总结:
         1. 当程序启动时,就会加载项目中所有的类和分类,加载后会调用每个类和分类的+load方法(仅一次)
         2. 当第一次使用某个类时,就会调用当前类的+initialize方法
                   (优先级:分类--->--->父类)
         3. 先加载父类,在加载子类(先调用父类的+load方法,在调用子类的+load方法)
           先初始化父类,在初始化子类(先父类+initialize,再子类+initialize
         4. initialize方法可以用来监听类在何时被使用
注意:
      当一个项目中,存在,父类,子类,以及父类的分类时,程序启动,加载完毕后,类的加载顺序为:父类--->子类--->父类的分类
         如果一个类(Person)有分类(Person(PJ))的话,当在main函数中使用到该类(Person)的子类(Student):[[Student alloc] init],那么initialize方法只会被子类及其分类调 用,而类本身的initialize不会被调用。

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
仰望的繁华 + 2 总结贴总比水贴强
Micro + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马