Objective-C内存中的五大区域
栈内存(Stack Memory):栈内存用来存储局部变量和函数调用的上下文信息。栈内存是自动分配和释放的,当变量超出作用域或函数调用结束时,栈内存会自动释放。
堆内存(Heap Memory):堆内存用来动态分配对象的内存空间。在Objective-C中,使用
alloc
和init
等方法来手动分配和释放堆内存。堆内存通常用于存储对象、数据结构或者较大的数据块。静态区(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,返回对象的地址