Stack – Frame – Objective-C中的堆

我在本网站上发现的所有问题仅涉及Stack vs Heap而不是

讨论框架所以这是我的问题.不要区分这三者.

我知道的:

帧:
框架就像黑板,例如函数的变量.
在函数运行时,存储所有实例变量
在该功能的框架内.当一个函数被调用时
框架在堆栈顶部创建.

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

堆:
所有对象指针都存在于堆上.

Stack和Frame很清楚(我想)但是我对Heap声明是对的吗?

最佳答案

Heap: All object pointers live on the heap.

Stack and Frame is clear (I think) but am I right with my Heap statement?

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

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

点赞