zoukankan      html  css  js  c++  java
  • Block的循环引用详解

    1.首先我们创建了一个网络请求工具类

     

    然后storyboard里面去创建了一个导航控制器 并且把它设置为初始控制器   然后拖入一个bar button  --show--到自带的控制器

     

     这个时候运行代码的结果是

    x

    显然这个时候没有造成循环引用   

    为什么呢??????????????????

    //没有self的时候是没有循环引用的

    //tools是一个局部的变量 执行完了就会被释放掉了

    //这个时候出现了self没有出现循环引用  控制器也被释放了

    //block是右边的finished  finished 对这个self.view进行强引用  finished执行完毕了然后就释放掉了   会解除对self的强引用  并不会对self产生循环引用

    例子2:

    如果这个时候我们对控制器里面的那个networktools 中的tools对象来一个strong的强引用而不是copy的话

     这个时候的结果还是和之前是一样的为什么???

    控制器对self的解除引用是在finished执行完毕的时候

    对这个tools的强引用没有关系  

    例子3:

    block是一组准备好的代码   在需要的时候执行  可以当作参数传递  

    在异步的方法中能够执行block 的话就直接执行   如果当前方法不能直接执行block 通常需要定义一个属性   记录block 在需要的时候执行

    上图了:

    这个时候期待的循环引用就出现了

     

  • 相关阅读:
    android gradle 多渠道打包
    Gradle Plugin User Guide 中文版
    最好的JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
    ANDROID 中UID与PID的作用与区别
    HTTP Header 详解
    HTTP协议详解
    Volatile总结
    Condition-线程通信更高效的方式
    JAVA基础知识点(转载的)
    CountDownLatch和CyclicBarrier的区别
  • 原文地址:https://www.cnblogs.com/Ninesday/p/5644954.html
Copyright © 2011-2022 走看看