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

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,返回对象的地址

你可能感兴趣的:(OC,开发语言,objective-c)