OC-对象在内存中的存储

本文探讨了OC中对象在内存中的存储,包括内存的五大区域:栈、堆、BSS段、数据段和代码段。类加载过程中,创建对象时需访问类以了解成员,而声明类指针时检查类是否存在。对象存储涉及类作为自定义数据类型,通过[HMPerson new]创建实例。nil与NULL等价,表示指针不指向任何空间,多个指针可指向同一对象。同时介绍了分组导航工具的使用。
摘要由CSDN通过智能技术生成

1.内存中的五大区域

栈:存储局部变量
堆:允许程序员手动在堆区申请指定的连续的字节数的空间来使用
BSS段:存储未初始化的全局变量,静态变量
数据段(常量区):存储已经初始化的全局变量,静态变量,常量数据
代码段:存储程序的代码

2.类加载

当类第一次被访问的时候,会将类存储在代码段中,这个过程叫做类加载.
一旦类被加载到代码区,直到程序结束的时候才会被回收
1).当我们创建对象的时候,肯定需要访问这个类,因为只有访问了类才知道类中有哪些成员
2).如果只是声明类指针的时候,也会访问这个类,以确定这个类是否真的存在

3.对象在内存当中是如何存储的

1).类的本质:我们自定义的数据类型

HMPerson *p1 = [HMPerson new];

2).HMPerson *p1;
仅仅是生命了1个指针变量而已,这个指针变量的类型是HMPerson*
p1是局部变量,存储在栈区
p1只能存储地址  
p1是1个指针变量,不是1个对象
3).[HMPerson new];
 真正的创建对象
 new做的事情

 a. 在堆内存中申请一块合适大小的空间

 b. 在申请的这块空间中根据类的模板创建对象
    类中有那些属性,就把类的属性依次的挨个   
    isa,是1个指针
    这个isa指针指向代码段中的类
    相同类 isa相同

  c.初始化对象的属性,为对象的属性赋默认值
     ->如果属性的类型是
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值