关于闭包的循环引用

首先我们插入一段代码




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("滚")

}

}

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

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

你可能感兴趣的:(关于闭包的循环引用)