美文网首页iOS开发iOS Developer
关于闭包的循环引用

关于闭包的循环引用

作者: sunlin1234 | 来源:发表于2016-09-09 21:13 被阅读50次

    首先我们插入一段代码



    import UIKit

    class ViewController: UIViewController {

    //定义属性保存闭包

    var finished:(()->())? //闭包的返回值是可选类型

    //定义属性必须初始化;如果不想初始化,可以使用可选?来代替

    override func viewDidLoad() {

    super.viewDidLoad()

    loadData {

    print("回到主线程更新UI")

    //在闭包中必须使用self

    self!.view.backgroundColor = UIColor.redColor()

    }

    }

    func loadData(finshed:()->()){

    print("执行耗时操作")

    self.finished = finshed

    finshed()

    }

    //析构函数,相当于dealloc,释放资源

    deinit{

    print("滚")

    }

    }

    闭包中国年的finshed保存了一个闭包,当使用self.view.backgroundColor = UIColor.redColor()时,self控制器就会强引用闭包,闭包也强引用控制器,这样就会造成循环引用,资源无法释放。

    解决循环引用在oc和swift中是一样的都采用弱引用。如上。

    相关文章

      网友评论

        本文标题:关于闭包的循环引用

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