swift 闭包循环引用

  当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用。swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量。例如下面定义了一个捕获列表,引用self为unowned引用,这样在宾傲中用self就不会导致循环引用

    let name = "cyy"
    lazy var someClosure: (Int, String) -> String = {
        [unowned self](index: Int, stringToProcess: String) -> String in
        print(stringToProcess + self.name)
        return self.name
    }
//打印的值为:
//lllcyy
//deinit >>><kuaixiaoyigou.LoginViewController: 0x7fde8a40acb0>

 去掉捕获列表

let name = "cyy"
    lazy var someClosure: (Int, String) -> String = {
       (index: Int, stringToProcess: String) -> String in
        print(stringToProcess + self.name)
        return self.name
    }
//打印值:
//lllcyy 没有调用deinit

  

原文地址:https://www.cnblogs.com/pigface/p/5385813.html