Swift解决闭包的循环引用方法

Swift闭包和OC的block一样,只要是内部的变量都会加上一个strong的强引用

/*解决循环引用三种方法

1.

unowned var weakself = self

2.

weak var weakself = self (此时weakself是可选项,要!解包)

3.捕获列表(可以在调用"闭包"的时候,在我们的形参列表前面通过[]指定捕获的对象,告诉系统如何处理这些捕获的值!!!)

block = { [unowned self]() -> Void in

self.view.backgroundColor = UIColor.redColor()

}

应用场景:

什么时候用weak

| - 当被保存的对象有可能提前释放时,用weak

什么时候用unowned

| - 当被保存的对象使用时不会提前被释放,就用unowned

*/

block = { [unowned self]() -> Void in

self.view.backgroundColor = UIColor.redColor()

}

推薦閱讀更多精彩內容