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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

类本质、类对象
所有的类在内存中,都是以class类型的方式存储的,翻译成中文:就是类类型。每一个类都是一个class类型的变量。
类的本质:类的本质其实也是一个对象,一个class类型的对象变量
typedef struct objc_class *Class
;由此可知:class就是struct objc_class * 的别名,作用是定义结构体指针,表示所指向的结构体变量的首地址
类对象的定义:
Class 类对象的名称= 【类名 class 】,
类对象指向的那一块存储了类的基本信息:类大小、类名称、类版本、以及方法的映射等,是以一个结构体的形式存在的,而类对象就是结构体指针
类对象如何获取:Dog * dd= [ Dog new ]
一、通过实例变量获取
class c = [ dd  class ]
二、通过类名获取(类名其实就是类对象)
class c = [ Dog class ]
类对象的使用:(和类名的使用方法差不多)
1)对来调用类方法
2)可以用来定义对象
 Dog * dd = [ Dog new] = [ c new] = [ [ c  alloc ] init](前面必须是类名,不能是类对象)
类对象的存储就是对象的存储中,又加了一步,
栈区:存储对象名,对象名 -> 堆区中的存储对象的内存首地址
堆区:开辟了存储对象的空间,存储类的属性,ISA指针 ==类对象名(是个指针)-> 指向类对象堆区中的对象是根据类对象中存储的信息生成的,堆区中的每个对象(又叫实例对象)都有一个ISA指针,这个指针就是类对象的值,指向数据区中的类对象
数据区:有一块内存,存储了类的基本信息:类大小、类名称、类版本、以及方法的映射等,类似于一个结构体。而类对象就相当于指向这一块内存的一个指针。而数据区中也有一个ISA指针,指向代码区中的类代码段:存储类的声明和实现栈区:对象名 —> 堆区:存储实例对象的内存每个实例对象中的ISA指针=类对象 —>数据区:存储类的信息的内存
数据区:ISA指针 —>代码区中的类SEL是方法的类型:类里面的方法都是转换成SEL变量存储的

1 个回复

倒序浏览
学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马