swift学习--闭包的循环引用解决

来源:互联网 发布:淘宝网服装货源 编辑:程序博客网 时间:2024/05/07 11:46

一、什么是循环引用、怎么发生的

     循环引用就是当self 拥有一个block的时候,在block 又调用self的方法。形成你中有我,我中有你,谁都无法将谁释放的困局。

    在oc中,通常解决block循环引用的办法就是weak来修饰self!

    __weak typeof self (weakself) = self

    swift中的闭包等于OC中的block,因此在使用闭包的时候也需要注意循环引用的问题

二、解决swift中闭包循环引用问题

  1.类似block解决办法

        weak var weakSelf = self        //解决循环引用 ,这里用var 而不用let        //因为weak可能在运行时被修改 ——》指向的对象一旦被释放,会被设为nil        GCDText { (data) in            //? 可选解包 , 对象为nil,不会向对象发送getter消息,更安全            //! 强行解包 ,如果对象为nil 会发生崩溃,一般用于对象接下来要进行计算            print(weakSelf?.view ??  UIView())                    }

2.swift解决方法,推荐使用

        GCDText {[weak self] (data) in                        print(self?.view ?? UIView())        }

3.unowned;

        GCDText { [unowned self](data) in                 }


unowned

   

    


原创粉丝点击