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 在需要的时候执行

    上图了:

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

     

  • 相关阅读:
    Code基础——2.排序
    设计模式——4.装饰模式
    Shader笔记——1.光照基础
    C#笔记——7.序列化与反序列化
    C#笔记——6.反射与特性
    lua小技巧记录--新建对象时重置元表
    发现的lua小技巧记录--在:方法中使用self的技巧
    lua版pureMVC框架使用分析
    在xlua中使用DoTween动画插件
    Unity工程性能优化学习笔记
  • 原文地址:https://www.cnblogs.com/Ninesday/p/5644954.html
Copyright © 2011-2022 走看看