关于闭包的循环引用

首先我们插入一段代码




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中是一样的都采用弱引用。如上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容