美文网首页
在block中对弱引用进行强引用

在block中对弱引用进行强引用

作者: lanmoyingsheng | 来源:发表于2019-02-20 09:14 被阅读2次
    typealias Closer = ((_ string1 : String, _ string2 : String) -> Void)
    var block:Closer?
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        
        let vc = ViewController()
        weak var weakSelf = vc
        
        self.block = { (string1 : String,  string2 : String) -> Void in
            
            print(weakSelf)
            let strong = weakSelf
            
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5, execute: {
                
                print(strong)
            })
        }
        
        self.block?("", "")
    }
    

    打印结果:

    Optional(<Demo.ViewController: 0x7fd93a40ace0>)
    Optional(<Demo.ViewController: 0x7fd93a40ace0>)

    如果block中不进行强引用,而直接强行拆包,会引起奔溃。这在OC中更能体现。
    打印结果:

    Optional(<Demo.ViewController: 0x7fd93a40ace0>)
    nil

    相关文章

      网友评论

          本文标题:在block中对弱引用进行强引用

          本文链接:https://www.haomeiwen.com/subject/kercyqtx.html