面试题库iOS 知识点面试题 For BearLin

iOS 堆和栈的区别?

2015-09-17  本文已影响10917人  AI码上编程

前言

堆和栈是什么?有什么区别?是干嘛的?啥东西呀这是?别急,慢慢看下去

内存管理

移动设备的内存及其有限,每一个APP所能占用的内存是有限制的

(吐槽一下:iPhone6s还是16G起步,还好我也买不起->_-> 扯远了~~~)

什么行为会增加APP的内存占用

内存管理范围

引入堆和栈的概念

因为:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release
OC对象存放于堆里面(堆内存要程序员手动回收)
非OC对象一般放在栈里面(栈内存会被系统自动回收)
堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存

举例说明

该代码块在内存中的表现形式如下图

图中可以看到,栈里面存放的是非对象的基本数据类型,堆内存存放着oc对象

当代码块一过,里面的a,b,*c指针都会被系统编译器自动回收,因为它存放在栈里面,而OC对象则不会被系统回收,因为它存放堆里面,堆里面的内存是动态存储的,所以需要程序员手动回收内存

总结区别

一位网友用10个字总结了堆和栈的区别

栈是吃了吐 堆是吃了拉

虽然不是很文雅,凑合着理解,凑合着看吧!
上一篇 下一篇

猜你喜欢

热点阅读