zoukankan      html  css  js  c++  java
  • 循环引用 && weak strong


    @weakify _weak
     _weak

    @weakify(self); // RAC _weak的self_weak_变量

    • 解决循环引用
      • 问题: weakSelf是弱引用,会被释放
    _weak typeof(self) weakSelf = self;
    self.block = ^{
    dispatch_async(dispatch_get_global_queue(0,0),^{
    [NSThread sleepForTimeInterval:1];
    NSLog(@"%@",weakSelf);
    });
    return self;
    };
    • 循环引用的分类
      • 父子对象关系
    class Parent{
    var name:String
    var child: Child?
    init(name: String){
    self.name = name
    }
    }
    
    class Child{
    var name: String
    weak var parent: Parent!
    init(name:String, parent: Parent){
    self.name = name
    self.parent = parent
    }
    }    

     

      • 当block和闭包包含在类的成员变量中

    > 闭包和block是独立的内存对象,会retain它们所引用的对象
    > 有一个类中的block恰好引用这个类的属性或方法,可能产生循环引用

    _weak typeof(self) weakSelf = self;
    self.block = ^{
    [weakSelf description];
    };    
      • GCD: dispatch_async

    > dispatch_async() 闭包会强引用self,但是实例化的self不会引用闭包。所以self会被释放,循环引用不会产生
    > 不能使用weakSelf,对象的生命周期结束早于闭包结束,然后weakSelf会被释放

  • 相关阅读:
    js使用笔记
    rabbit-mq使用官方文档
    tomcat Enabling JMX Remote
    Venom的简单使用
    Random模块
    时间模块
    shulti模块简述
    Python的os模块
    Python压缩及解压文件
    Kali的内网穿透
  • 原文地址:https://www.cnblogs.com/HackHer/p/8151214.html
Copyright © 2011-2022 走看看