swift 中解除循环引用的方法

swift 中解除循环引用的方法

var  block1 : (()->())? = nil

var  block2 : (()->())? = nil

var  block3 : (()->())? = nil

方法1: 苹果推荐写法

    block1 = { [weak self]  in
        self?.view.backgroundColor = UIColor.red;
    }
    // 可选绑定
    guard let b1 = block1  else{
        return
    }
    // 调用
    b1()

方法2: oc 的写法

    weak  var  weakSelf = self
    block2 = {
        weakSelf?.view.backgroundColor = UIColor.red;
    }
    // 可选绑定
    guard let b2 = block2  else{
        return
    }
    // 调用
    b2()

方法3: self 是assign 的 ,不会强引用 ,但是对象释放,指针地址不会改变,如果对象释放,会出现野指针问题

    block3 = { [unowned  self] in
        self.view.backgroundColor = UIColor.red;
    }
    // 可选绑定
    guard let b3 = block3  else{
        return
    }
    // 调用
    b3()
}

判断是否 销毁,检查内存泄漏

deinit {
    print( "\(self)消失了")
}

你可能感兴趣的:(swift 中解除循环引用的方法)