美文网首页
什么是ARC

什么是ARC

作者: GryllsNSTimer | 来源:发表于2015-12-16 23:34 被阅读123次
    什么是ARC
    • ARC的全称是Automatic Reference Counting(自动引用计数)

    • ARC是自iOS 5之后增加的新特性

    • 不需要程序员管理内容, 编译器会在适当的地方自动给我们添加release/retain等代码

    • ARC的实现细节

    • 编译器会自动在适当的地方插入适当的retain、release、autorelease语句

    • 也就是说, 编译器会自动生成内存管理的代码, 不用程序猿手动编写

    • 与ARC相对的是MRC

    • 手动引用计数, 可以简称MRC (Manual Reference Counting)

    • 所有对象的内容都需要我们手动管理, 需要程序员自己编写release/retain等代码

    ARC的判断原则
    • 只要没有强指针指向对象,对象就会被释放。

    • 指针分类:
      (1)强指针:默认的情况下,所有的指针都是强指针,关键字strong
      (2)弱指针:_ _weak关键字修饰的指针
      声明一个弱指针如下:
      _ _weak Person *p;
      ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空操作。

    _ _weak Person *p=[[Person alloc]  init];//不合理,对象一创建出来就被释放掉,对象释放掉后,ARC把指针自动清零。
    

    ARC中在property处不再使用retain,而是使用strong,在dealloc中不需要再[super dealloc]。
    @property(nonatomic,strong)Dog *dog;// 意味着生成的成员变量dog是一个强指针,相当于以前的retain。
    如果换成是弱指针,则换成weak,不需要加
    _。

    ARC的特点总结:

    (1)不允许调用release,retain,retainCount
    (2)允许重写dealloc,但是不允许调用[super dealloc]
    (3)@property的参数:
    Strong:相当于原来的retain(适用于OC对象类型),成员变量是强指针
    Weak:相当于原来的assign,(适用于oc对象类型),成员变量是弱指针
    Assign:适用于非OC对象类型(基础类型)

    相关文章

      网友评论

          本文标题:什么是ARC

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