Objective-C对象如何在内存中存储

本文详细介绍了Objective-C中的内存区域,包括栈内存(局部变量和函数上下文)、堆内存(动态分配的对象)、静态区(全局和静态变量)、常量区(不可变数据)以及代码区。此外,还阐述了类加载机制和对象在内存中的存储过程。
摘要由CSDN通过智能技术生成

Objective-C内存中的五大区域

栈内存(Stack Memory):栈内存用来存储局部变量和函数调用的上下文信息。栈内存是自动分配和释放的,当变量超出作用域或函数调用结束时,栈内存会自动释放。

堆内存(Heap Memory):堆内存用来动态分配对象的内存空间。在Objective-C中,使用allocinit等方法来手动分配和释放堆内存。堆内存通常用于存储对象、数据结构或者较大的数据块。

静态区(Static Memory):静态区用来存储全局变量和静态变量。这部分内存在程序运行期间一直存在,直到程序结束才会被释放。

常量区(Constant Memory):常量区用来存储不可变的常量数据,例如字符串常量。这部分内存也在程序运行期间一直存在,直到程序结束才会被释放。

代码区(Code Memory):代码区存储程序的指令和函数代码。这部分内存通常是只读的,不可修改。

类加载

1.在创建对象的时候肯定是需要访问类的

2.声明1个类的指针变量也会访问类的

在程序运行期间当某个类第1次被访问到的时候,会将这个类存储到内存中的代码段区域,这个

过程叫做类加载

只有类在第1次被访问时,才会做类加载

类被加载到代码段以后,直到程序结束的时候才会释放

对象如何在内存中存储 

Person *p1 [Person new];

1.Person*p1;会在栈内存中申请1块空间,在栈内存中声明1个Person类型的指针变量p1

                p1是1个指针变量,只能存储地址

2.[Person new];

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

        b,在这个空间中根据类的模板创建对象

        将类模板中定义的属性依次声明在对象之中

        对象中有1个属性isa是1个指针,指向对象所属的类在代码段中的地址

        c,初始化对象的属性

        如果属性的类型是基本数据类型那么就赋值为0

        如果属性的类型是C语言的指针类型那么就赋值为NULL

        如果属性的类型是0C的类指针类型那么就赋值为n11

        d,返回对象的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcannal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值