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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.内存的知识回顾
    栈:局部变量
    堆:OC对象自己申请空间 calloc realloc malloc
    BSS段:未被初始化的全局变量,静态常量
    数据段/常量区:已被初始化的全局变量,静态常量和常量数据
    代码段:存储代码
2.类的加载
    加载类的时候会把类和类内部涉及的类全部加载到代码段中,当类第一次被访问的时候就开始加载。
3.类的加载过程
    加载时间:第一次被访问的时候就开始加载,
    加载形式:--在代码区申请一段空间:任何内存中的空间都是有类型的,存储类的空间的类型就是Class类型,代码区开辟的这块空间存储的就是class类型的对象。
            --存储这个类:类在代码区是用class类型的对象存储的,class也是一个类,可以创建一个对象,这个对象就是类在内存中的存储形式。class类是OC定义的类,可以创建一个对象,里面存储的是类的信息。类的主要信息包括类名,属性,方法。
4.收回代码中的类:当程序结束的时候,类就从代码段中回收。
5.Class类和Class类创建的对象详解
    --如何拿到一个对象所属于类的Class对象的地址。Class是一个结构体指针,所以拿到一个指向Class对象的地址,不需要加星。
    --调用对象的class方法,就可以得到存储这个对象所属的类的Class对象。
        HMPerson *p1=[HMPerson new];
        Class c1=[p1 class]
    --调用类的类方法class,就可以得到这个类的class对象。
        Class c2=[HMPerson class]
6.拿到类的Class对象之后有什么作用
    --类对象中存储的是类的信息,Class c1=[HMPerson class],c1对象中存储的就是HMPerson类的信息。所以我们可以这么认为,c1对象代表HMPerson类,c1对象和HMPerson类完全等价。所以可以使用这个Class对象来调用类的类方法。
    --注意不能调用对象方法。但是可以创建实例对象。
    --但是可以间接的创建对象
        Class c1=[HMPerson class]
        HMPerson *p1=[c1 new];//间接创建对象
        [p1 sayHi];

7.如何取到存储类的Class指针?
    1)要声明Class指针不要加*,因为Class类是一个typedef类型,在定义的时候就已经加*了。
    2)--调用对象的class方法,就可以得到存储这个对象所属的类的Class对象 HMPerson *p1=[HMPerson new] Class c1=[p1 class]
      --调用这么类的类方法class,就可以得到存储这个类的class对象,Class c1=[HMPerson class].

3 个回复

倒序浏览
回复 使用道具 举报

哈哈哈!!!!!
回复 使用道具 举报
挺好,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马