美文网首页
问题:什么是ARC(ARC是为了解决什么问题诞生的)?

问题:什么是ARC(ARC是为了解决什么问题诞生的)?

作者: 姜小舟 | 来源:发表于2020-05-13 18:50 被阅读0次

ARC(Automatic Reference Counting 自用引用计数)是苹果在 iOS5 中引入的内存管理机制. Objective-C 和 Swift 使用 ARC 追踪和管理应用的内存使用. ARC是编译器通过对代码的静态分析,确定对象的生命周期,并在合适的位置自动加上retain和release的机制。把内存管理交给编译器以后,我们不需要再调用任何的retain和release了。ARC减少了MRC带来的思考负担,减少了内存问题出现的可能性,也大幅减少了代码量,, 能够大幅度提升程序的 流畅性 和 可预测性 。

ARC的修饰符提供成员变量访问方法、权限、环境、内存管理类型的声明。
属性的参数分为三类,基本数据类型默认为(atomic,readwrite,assign),对象类型默认为(atomic,readwrite,strong),其中第三个参数就是该属性的内存管理方式修饰,修饰词可以是以下之一:

  • strong:强引用(引用计数+1),持有所指向对象的所有权,无修饰符情况下的默认值。如需强制释放,可置nil。
  • weak:弱引用,不持有所指向对象的所有权,引用指向的对象内存被回收之后,引用本身会置nil,避免野指针。
    使用set方法赋值时,实质上不保留新值,也不释放旧值,只设置新值。
  • retain:release旧值,再retain新值(引用计数+1)
    使用set方法赋值时,实质上是会先保留新值,再释放旧值,再设置新值,避免新旧值一样时导致对象被释放的的问题。
  • copy:release旧值,再copy新值(拷贝内容)
    一般用来修饰String、Dict、Array等需要保护其封装性的对象,尤其是在其内容可变的情况下,因此会拷贝(深拷贝)一份内容給属性使用,避免可能造成的对源内容进行改动。
    使用set方法赋值时,实质上是会先拷贝新值,再释放旧值,再设置新值。
    实际上,遵守NSCopying的对象都可以使用copy,当然,如果你确定是要共用同一份可变内容,你也可以使用strong或retain。
  • assign:直接赋值,一般用来修饰基本数据类型

ARC 使得内存管理更加轻松,但是 ARC 还有以下不足:

  • 不能管理 CoreFoundation 中的对象,所以对于 CoreFoundation 对象,需要我们手动来管理内存
  • 不能释放循环引用的对象(这里也不算是 ARC 不足,这个是引用计数机制本身的缺点)

相关文章

  • 2017 iOS面试题 总结二

    1. 什么是arc?(arc是为了解决什么问题诞生的?) 答:ARC 是 Automatic Reference ...

  • iOS题目

    1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference ...

  • 知乎上iOS面试题目

    1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference ...

  • iOS面试题及答案

    1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference ...

  • iOS

    1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference ...

  • Peak面试题

    1.什么是arc?(arc是为了解决什么问题诞生的?) 首先解释ARC: automatic reference ...

  • 关于一些 iOS 面试问题的解答

    1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Referenc...

  • iOS 常见的基础知识,相信很多人回答不上

    一、什么是arc?(arc是为了解决什么问题诞生的?) Automatic Reference Counting,...

  • iOS高级面试题-网易

    1、什么是arc?(arc是为了解决什么问题诞生的?)首先解释ARC: automatic reference c...

  • iOS面试题-网易OA系统岗位

    1、什么是arc?(arc是为了解决什么问题诞生的?)首先解释ARC: automatic reference c...

网友评论

      本文标题:问题:什么是ARC(ARC是为了解决什么问题诞生的)?

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