美文网首页ios 内存管理
iOS内存管理总结(ARC/MRC)

iOS内存管理总结(ARC/MRC)

作者: noprkl | 来源:发表于2016-09-21 22:53 被阅读132次

MRC原理

MRC: 手动管理内存(retain, release, autorelease,不多说) 持有对象,retain+1 ,引用计数加1, 释放对象:release -1, 引用计数减1,当引用计数为0时,会自动释放内存. autorelease对象内存的管理放到autoreleasepool中, 当pool drain时,回收内存. (这是基于 objective-c的运行时特性和垃圾回收机制)

MRC下内存管理的缺点:

1、释放一个堆内存时,首先要确定指向这个堆空间的指针都被release了。(避免提前释放)

2、释放指针指向的堆空间,首先要确定哪些指向同一个堆,这些指针只能释放一次。(避免释放多次,造成内存泄露)

3、模块化操作时,对象可能被多个模块创建和使用,不能确定最后由谁释放
多线程操作时,不确定哪个线程最后使用完毕。

ARC原理

ARC的规则就是只要对象没有强指针引用,就会被释放掉,换而言之 只要还有一个强引用指针变量指向对象,那么这个对象就会存在内存中。弱指针指向的对象,会被自动变成空指针(nil指针),从而不会引发野指针错误。

ARC有什么好处

引用计数方式的内存管理方式没有变,只是自动地帮我们去处理引用计数strong变量在超出变量作用域时,会自动释放其所retain的对象,即自动调用release(编译器自动插入release,用clang看程序汇编输出可以看出来,插入objc_release)

ARC缺点:

1.虽然ARC给我们编程带来的很多好多,但也可能出现内存泄露。如下面两种情况:

循环参照:A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放。

    解决办法:一段用强引用,一段用弱引用。outlet的控件属性都是weak修饰,因为他们已经被父控件强引用。

死循环:如果有个ViewController中有无限循环,也会导致即使ViewController对应的view消失了,ViewController也不能释放。

2.ARC会造成额外的retain/release,造成不必要的消耗,正是因为这样它会比MRC慢一点 不过这些额外的引用计数暴增了代码运行的正确性

ARC只对OC对象的进行内存管理,对于CoreFundation的api使用,他的对象所有权没有移交给OC对象管理,都需要手动去释放。现在Xcode支持ARC/MRC混合编码

<big>一个iOS学习路上的小学僧,欢迎指正!


相关文章

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • 内存管理

    OC知识--彻底理解内存管理(MRC、ARC) IOS工程中混合使用ARC与MRC iOS 简单而粗暴的说一说内存...

  • OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    OC 知识:彻底理解 iOS 内存管理(MRC、ARC) - 简书

  • iOS内存管理相关知识点

    iOS 开发:彻底理解 iOS 内存管理(MRC、ARC)[https://www.jianshu.com/p/4...

  • iOS系统复习(二) 内存Memory

    一、 内存管理 1 管理方式:MRC(已经很少用) ARC(常用)ARC:称为自动引用计数,ARC是iOS5推出的...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

  • iOS Runtime 数据结构

    ios内存布局 内存管理方案 数据结构 ARC & MRC 引用计数 弱引用 自动释放池 循环引用 ios内存布...

  • iOS内存管理总结(ARC/MRC)

    MRC原理 MRC: 手动管理内存(retain, release, autorelease,不多说) 持有对象,...

  • iOS 内存管理

    iOS 的内存管理分为 MRC 跟 ARC 一 、 为什么要管理内存 当 app 所占的内存比较多的时候,系统会发...

  • IOS内存管理

    内存概述 内存是用来存啥的? 内存布局 哈希表 垃圾回收(GC) IOS内存管理机制 MRC & ARC T...

网友评论

    本文标题:iOS内存管理总结(ARC/MRC)

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