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)消失了")
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容