本文仅供自我学习,禁止转载。
Objective-C的对象在内存中是以堆的方式分配内存的,并且堆内存是由你释放的。这个是MRC,不过后来出了ARC很多就由系统自动释放,如果系统不能手动释放的则需要我们手动释放,不释放则会引起内存泄漏。这个操作方式和数据结构中的栈很像。堆都是动态分配内存。堆有静态分配内存和动态分配内存。栈的话是先进后出。堆是先进先出。栈的内存空间分配是连续的,堆的内存空间非配是不连续的。alloc 在堆上申请一块空间返回一个指针,这个指针在栈上,申请的空间在堆上,所以对象也存储在堆上。
网上给出的解释是:
栈是一种数据结构。
1、栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
2、栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
3、栈可以用来在函数调用的时候存储断点,做递归时要用到栈。
1、栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2、栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。
言归正传
接着我们探讨一下Objective-C中的push和pop。我们来猜一下系统在这个过程中做了什么
事。简单来说,push就是进栈,pop就是出栈。楼主总结了一张图。今天就到这里了。
![](https://img.haomeiwen.com/i11097195/c440fc207e4277b9.jpg)
本来还准备写一篇如何查看堆和栈及调试的文章,但是网上有一篇调试文章写的很好我就不写了。给大家一个传送门。《点完进行传送》
网友评论