zoukankan      html  css  js  c++  java
  • weakself的另一种写法

    在不久前看AFNetworking的源码时候发现了这么一句:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 不知道这行代码的使用场景的同学你该去自习看看ARC的注意事项和Block的使用了
    // AFNetworking的写法
    __weak __typeof(self)weakSelf = self;
    
    // 我之前一直这么写的
    __weak XxxViewController *weakSelf = self;

    其实以上的2种写法都是对的: 

    __typeof(self): 获取到self的数据类型,会被解析成XxxViewController *const __strong (假如你的self是XxxViewController的话)

    __typeof(self) 是获取到self的数据类型,这样定义出的weakSelf就是和self一个数据类型的, 加上__weak是建立一个弱引用,整句就是给self定义了一个弱引用性质的替身;这个一般用在使用Block代码块时会用到,因为Block代码块会copy它内部的变量,可能会造成循环引用, 无法释放self和该Block代码块的所属对象,而使用__weak性质的weakSelf替代原self,就可以切断block对原self的直接引用,从而避免循环引用

    总结:__weak MyController *weakSelf = self 与 __weak __typeof(self)weakSelf = self 等价;

  • 相关阅读:
    华为机试练习(一)
    LM拟合算法
    5.1 模块化程序设计
    第3周 运算的流程控制
    KEGG数据库介绍
    topGO
    GO.db
    Bioconductor应用领域之基因芯片
    org.Hs.eg.db包简介(转换NCBI、ensemble等数据库中基因ID,symbol等之间的转换)
    Bioconductor的历史
  • 原文地址:https://www.cnblogs.com/hello-Huashan/p/5148353.html
Copyright © 2011-2022 走看看