写点什么

iOS 中内存管理(ARC)

作者:NewBoy
  • 2022 年 7 月 20 日
  • 本文字数:749 字

    阅读完需:约 2 分钟

ARC

ARC 是新的 LLVM3.0 编译器的一项特性,在工程中使用非常简单,不用再写releaseretainautorelease三个关键字。当开启 ARC 时,编译器将自动在代码合适的地方插入releaseretainautorelease



ARC 注意点和优点

  • ARC 注意点

  • ARC 是编译器的特性,而不是运行时的特性

  • ARC 不是其他语言中的垃圾回收,有着本质区别,其他语言是定时查看,ARC 就是写好的代码,直接执行就可以

  • ARC 优点

  • 完全消除了手动管理内存的繁琐

  • 基本上能够避免内存泄漏

  • 有时还能更加快速,因为编译器还可以执行某些优化

  • ARC 的判断原则

  • 只要没有强指针指向对象,对象就会被释放

  • 强指针


      //默认所有指针变量都是强指针      Person *p = [[Person alloc]init]; 
复制代码


      //被_strong修饰的指针       __strong Person *p = [[Person alloc]init]; 
复制代码


  • 弱指针(在开发中,千万不要使用一个弱指针保存刚刚创建的对象,会被立即释放)


     //被__weak修饰的指针     __weak Person *p = [[Person alloc]init]; 
复制代码



循环引用

由于对象间彼此引用,无法释放,所以,循环引用会引发内存泄漏


  • 如果 A 对象拥有 B 对象,而且 B 对象又拥有 A 对象,此时会形成循环retain


    @class Animal;    @interface Person : NSObject    @property (nonatomic,strong) Animal *animal;    @end
@class Person; @interface Animal : NSObject @property (nonatomic, strong) Person *person; @end
复制代码


  • 如何解决这个问题,不要让 A retain B, B retain ARC 中保存对象不用assign,用weakassign是专门用于保存基本数据类型的,保存对象用weak



    @class Animal;    @interface Person : NSObject    @property (nonatomic,strong) Animal *animal;    @end
@class Person; @interface Animal : NSObject @property (nonatomic, weak) Person *person; @end
复制代码


发布于: 刚刚阅读数: 5
用户头像

NewBoy

关注

虽不年少,艳阳高照 2019.04.10 加入

还未添加个人简介

评论

发布
暂无评论
iOS中内存管理(ARC)_ios_NewBoy_InfoQ写作社区