美文网首页iOS面试汇总
iOS内存管理(6)-堆栈的理解和区别

iOS内存管理(6)-堆栈的理解和区别

作者: 奔跑吧小蚂蚁 | 来源:发表于2018-07-09 15:29 被阅读33次

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

  • 创建一个oc对象
  • 定义一个变量
  • 调用一个函数或者方法

内存管理范围

  • 任何继承了NSObject的对象
  • 对其它非对象类型无效
    简单来说:
    只有oc对象需要进行内存管理
    非oc对象类型比如基本数据类型不需要进行内存管理

堆栈的区别:

1、堆空间的内存是动态分配的、一般存放对象、并且需要手动释放内存。

2、栈空间的内存是由系统自动分配、一般存放局部变量等、不需要手动管理内存。

引入堆和栈的概念

  • 所以问题就来了,为什么OC对象需要进行内存管理,而其它非对象类型比如基本数据类型就不需要进行内存管理呢?
  • 只有OC对象才需要进行内存管理的本质原因?

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

从管理方式来讲:

  • 对于栈来讲,是由编译器自动管理,无需我们手工控制;

  • 对于堆来说,释放工作由程序员控制,容易产生内存泄露(memory leak)

从申请大小大小方面讲:

  • 栈空间比较小<2M>

  • 堆空间比较大

从数据存储方面来讲:

  • 栈空间中一般存储基本类型,对象的地址

  • 堆空间一般存放对象本身,block的copy等

堆栈的区别

栈是吃了吐(LIFO先进后出)
堆是吃了拉(FIFO先进先出):

总感觉讲解的不够深入,也希望大神给予深入的方向。

相关文章

  • iOS内存管理(6)-堆栈的理解和区别

    什么行为会增加APP的内存占用 创建一个oc对象 定义一个变量 调用一个函数或者方法 内存管理范围 任何继承了NS...

  • 内存管理面试复习

    内存管理模块 看目录 1. 为何有堆栈,说说堆栈的区别,分别存放什么,为什么要有堆和栈,对象为何放到堆上,有没有栈...

  • 内存管理

    ARC内存管理机制详解理解 iOS 的内存管理

  • 内存管理篇,RunLoop

    iOS内存管理 RunLoop理解

  • iOS - 内存管理(三)之ARC

    前言 阅读本文前请先理解前面的两篇内容《iOS - 内存管理(一)之MRR》和 《iOS - 内存管理(二)之Co...

  • iOS高频面试题(持续更新)

    1、ARC和MRC管理内存有什么不同,iOS中内存管理的原理 2、assign和weak的区别,解释一下stron...

  • iOS ARM64 汇编入门

    这里主要介绍 iOS 平台上 ARM64 架构的寄存器和指令以及内存堆栈。 堆栈 在 iOS 中,栈空间是向下生长...

  • iOS-内存管理 堆栈

    为什么管理内存: 程序在运行的时候,要创建大量的对象,这些对象放在堆和栈上。(基本类型放在栈上,由系统自动管理。)...

  • iOS 内存管理 (1):堆栈

    栈: 栈是线程执行过程中存放在低地址位缓存数据的一个内存块,其读写速度是快的。一个线程对应一个这样的内存块,栈是先...

  • 内存管理面试题

    讲一下 iOS 内存管理的理解 讲一下 iOS 内存管理的理解实现原理 内存中的5大区分别是什么? ARC 的 r...

网友评论

    本文标题:iOS内存管理(6)-堆栈的理解和区别

    本文链接:https://www.haomeiwen.com/subject/mbqtpftx.html