美文网首页
内存管理归纳

内存管理归纳

作者: 庚庚庚 | 来源:发表于2017-11-28 14:24 被阅读0次

最近在阅读了iOS内存管理相关的博客,总结归纳了一些内容,以及面试中常见的问题,写在这里供大家分享。

1.为什么要对堆区的内存空间进行管理,而基本数据类型不需要管理呢?

因为基本数据类型的数据会被放入栈中,它们依次紧密排列,遵循先进后出的原则,系统会自动进行管理。而对象类型会被存放在堆中,堆中的内存是不连续的,无法自动释放,所以需要我们进行管理。

2.内存管理的范围?

任何继承了NSObject的对象,对基本数据类型无效,主要对堆区的内存进行管理。

3.为什么要进行内存管理?

因为设备的内存空间是有限的,如果一直占用,而不回收空间,内存就会一直被占用,导致内存空间不足,严重会导致程序直接崩溃。因此,在开发过程中,需要进行内存管理,以保证高效快速的分配内存,并且在适当的时候释放和回收内存资源。

4.什么是内存溢出?

是指程序在申请内存时,没有足够的空间供其使用。例如:申请了一个integer,但存下了一个long才存的下的数。

5.内存管理的原理?

(1)对象的所有权及引用计数器

对象的所有权:任何对象都有一个或多个拥有者,只要一个对象至少还有一个拥有者,他就不会被释放

(2) 任何自己创建的对象都归自己所有,可以使用alloc和new开头或名字中包含copy的方法创建对象,使用return来获得一个对象的所有权。

(3) OC中都有专门8个字节的存储空间来存储引用计数器,用整数表示对象被引用的次数。

引用计数器是判断对象是否回收内存空间的依据。

(4) 给对象发送消息

return  计数器+1,方法返回对象本身

release  计数器-1,但不代表释放,autorelease 也可使引用计数器-1.

retaincount消息  用来获得当前引用计数器的值

引用计数器为0,系统向对象发送dealloc消息,(调用[super dealloc]方法,一定要写在后面)释放相关资源,对象被回收后将不能在被使用(僵尸对象),僵尸对象不可复活,否则会导致程序崩溃,导致野指针错误

6.iOS 内存管理的分类?

MRR (MRC) 手动内存管理(iOS 5之前):

(1)当每创建一个对象时,它的引用计数为1,当不再使用该对象是,需要向对象发送release或者autorelease消息释放对象。

(2)当你通过其他方法获得一个对象时,如果对象引用计数为1且被设置为autorelease,则不需要执行任何释放对象的操作;

(3)如果你打算取得对象所有权,就需要保留对象并在操作完成之后释放,且必须保证retain和release的次数对等。

ARC   自动内存管理(iOS 5后):

ARC 模式下不再需要进行retain或者release等操作,ARC会自动向对象发送retain和release消息,简化了内存管理步骤,节省大量的开发时间。

注意:

有时候工程的历史比较久,需要从MRC转换成ARC,具体操作如下

Build Phases -> Compile Sources 设置m文件的编译器参数  为 -fno-obje-arc

相关文章

  • 内存管理归纳

    最近在阅读了iOS内存管理相关的博客,总结归纳了一些内容,以及面试中常见的问题,写在这里供大家分享。 1.为什么要...

  • 5、垃圾收集与内存分配策略(4)(JVM笔记)

    六、内存分配与回收策略 Java技术体系中所倡导的自动内存管理最终可以归纳为自动化解决了两个问题:给对象分配内存以...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • Rust 语言中的内存管理、borrow、&,ref,mut

    刚学习Rust, 觉得Rust在内存管理上很独特, 但是它的概念和语法让人很容混淆; 这里做一下归纳: Part ...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

网友评论

      本文标题:内存管理归纳

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