Objective-C中的Stack-Frame-Heap

Objective-C中的Stack-Frame-Heap,objective-c,memory-management,stack,heap,frame,Objective C,Memory Management,Stack,Heap,Frame,我在这个网站上找到的所有问题都只涉及StackvsHeap,没有 讨论Frame,下面是我的问题。不要把这三者区别开来 据我所知: 帧: 帧就像一块黑板,用于显示函数的实例变量。 函数运行时,存储所有实例变量 在该函数的框架内。当函数被调用时 帧创建在堆栈的顶部 堆栈: 堆栈可以可视化为帧的物理堆栈。 当一个方法(或函数)被执行时,它分配一个 堆栈中的内存块 堆: 所有对象指针都位于堆上 堆栈和框架是清晰的(我想),但我的堆语句是否正确?是的。堆是动态内存的非连续空间 堆:所有对象指针都位于堆上

我在这个网站上找到的所有问题都只涉及
Stack
vs
Heap
,没有 讨论
Frame
,下面是我的问题。不要把这三者区别开来

据我所知:

就像一块黑板,用于显示函数的实例变量。 函数运行时,存储所有实例变量 在该函数的
框架内。当函数被调用时
创建在
堆栈的顶部

堆栈
堆栈
可以可视化为
的物理
堆栈
。 当一个方法(或函数)被执行时,它分配一个
堆栈中的内存块

: 所有对象指针都位于
堆上


堆栈和框架是清晰的(我想),但我的
语句是否正确?

是的。堆是动态内存的非连续空间

堆:所有对象指针都位于堆上

堆栈和框架很清楚(我想),但我的Heap语句对吗

不完全是。大多数(*)动态分配的对象位于堆上,指向这些对象的指针位于其他对象(或变量,它们本质上是相同的东西)中,这些对象可能位于堆栈或堆上。“对象”和“指向对象的指针”之间的这种区别在Objective-C中很重要(并非在所有语言中都是如此),说所有“对象指针都在堆上”是不正确的


(*)“大多数”,因为在堆栈上分配动态对象是可能的,有时也是非常有用的。您不能对Objective-C对象执行此操作,但可以对C对象执行此操作(C是Objective-C的一部分)。先别担心这个问题,这个脚注更能说明这里描述的模型是一种简化。

基于@CRD的答案

考虑堆的另一种方式是顾名思义——一堆乱七八糟的东西。我们需要这些指针来帮助我们找到返回到被扔到堆上的对象的方法