• 09-ARC简介和基本原理


    1、基本简介

    (1)ARC,是 Automatic Reference Counting (自动引用计数器)的简称。

    (2)ARC 是自iOS 5.0 之后增加的新特性,完全消除了手动管理内存的繁琐,编译器会自动在适当的地方插入适当的 retain、release、autorelease 语句。我们不再需要担心内存管理,因为编译器可以为我们处理一切。

    (3)ARC 是编译器特性,不是iOS运行时特性,它也不是类似其它语言中的垃圾收集器。因此 ARC 和手动管理内存性能是一样,有时还能更快加速,因为编译器还可以执行某些优化。

    2、ARC 基本原理

    (1)规则

      ARC 的规则非常简单:只要还有一个强指针变量指向对象,对象就会保存在内存中。

    (2)强指针 和 弱指针

      1> 默认所有实例变量和局部变量都是强指针。

      2> 弱指针指向的对象被回收后,弱指针会自动变为空指针(nil指针)不会引发野指针错误

    3、ARC的基本使用

      首先,看看在 Xcode6.0.1 如何设置ARC的开关:

      第一步:点击

      

      第二步:在搜索中输入ARC

      

       第三步:在Apple LLVM6.0 - Language - Objectie - C处可以看到 ARC 设置选项

      

    (1)在ARC模式下,release 、retain 、retainCount 、autorelease 都是不能调用的。

      1> release不能被调用:

        2> retain 不能被调用

      3> retainCount  和 autorelease 也会出现和上面相同的错误,就不发图了。

    (2) 为了验证ARC 是不是帮我们解决了内存管理问题,我们重写一下dealloc方法:不能使用 [super dealloc];

    我们再次重写dealloc方法

    点击,运行程序,可以得到

    3、ARC 的原理

      通过(2)可知,ARC会帮助我们自动执行一些操作,我们没有告诉编译器要release,那么编译器怎么知道要使用release呢?

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

    指针分两种:

      1> 强指针:默认情况下,所有指针都是强指针  __strong(注:strong前是两个下划线)。

      2> 弱指针:__weak   弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。

           弱指针并不能决定对象会不会被释放,一切遵循ARC判断原则:只要没有强指针指向对象,就会释放对象。

    第1例:

     

    第2例:

     

    第3例:

     

    第4例:

    第5例:弱指针 __weak

    第6例:  __weak Person *p = [[Person alloc]  init]; 是没有意义的写法。

    正常情况下:

    使用__weak的情况:

  • 相关阅读:
    [转发]深入浅出EventSourcing和CQRS
    [转载]缓存与数据库双写一致性问题
    关于com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“java.lang.RuntimeException: Could not generate DH keypair”
    [转载]安装sql2016时提示Polybase 要求安装Oracle JRE 7更新51 (64位)或更高版本”规则失败
    windows安装配置压缩版mysql
    virtualbox虚拟机centeros7系统桥接网卡网络配置
    oracle导入dmp文件(恢复数据)
    解决PL/SQL DEVELOPER12查询中文乱码问题(本地没装Oracle)
    JAVA线程Thread
    深入构造器
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/4009001.html
Copyright © 2020-2023  润新知