类加载
- 创建对象的时候,肯定是需要访问类的
- 申明1个类的指针变量 也会访问类
- 只有类在第一次被访问的时候,才会做类加载
一旦类被加载到代码段以后,直到程序结束的时候才会被释放
代码段中: 主要是存储person类的代码(类的声明和类实现)
假设 下面这个代码写在函数之中
• Person *p1 ;会在栈内存中申请一块空间,在栈内存中声明了一个person类型的指针变量p1.
p1是一个指针变量,只能存储地址• [Person new];真正在内存中创建对象的是这句代码。
○ new做的事情
§ 在堆内存中申请一块合适大小的空间
§ 在这个空间中根据类的模板创建对象
□ 类模板中定义了什么属性,就把这些属性依次的声明在对象之中。对象中还有另外一个属性,叫做isa 指针,指向对象所属的类在代码段当中的地址
§ 初始化对象的属性(付默认值)
□ 如果是属性的类型是基本数据类型,那么就赋值为0
□ C语言的指针类型:NULL
□ OC类指针类型 nil
§ 返回对象的地址• 注意:
○ 对象中只有属性 而没有方法,自己类的属性外加一个isa指针指向代码段当中的类。
○ 如何访问对象的属性
§ 指针名->属性
§ 根据指针 找到指针指向的对象 再找到对象中得属性来访问
§ 如何调用方法:
[指针名 方法名];
先根据指针名找到对象,对象发现要调用方法,再根据对象的isa指针找到类○
• 为什么不把方法存储在对象之中?
○ 因为每一个对象的代码的实现都是一模一样的,没有必要为每一个对象都保存1个方法,这样的话,太浪费空间了,既然都一样,那么只保存一份。
• 对象的属性的默认值
○ 创建一个对象,没有为对象的属性赋值,那么这个对象的属性是有值的
§ 基本数据类型 0
§ c指针类型 NULL
§ OC 指针 nil
对象在内存中的存储
最新推荐文章于 2023-01-15 08:15:00 发布