swift学习--闭包的循环引⽤解决
⼀、什么是循环引⽤、怎么发⽣的学swift语言能干什么
循环引⽤就是当self 拥有⼀个block的时候,在block ⼜调⽤self的⽅法。形成你中有我,我中有你,谁都⽆法将谁释放的困局。    在oc中,通常解决block循环引⽤的办法就是weak来修饰self!
__weak typeof self (weakself) = self
swift中的闭包等于OC中的block,因此在使⽤闭包的时候也需要注意循环引⽤的问题
⼆、解决swift中闭包循环引⽤问题
1.类似block解决办法
weak var weakSelf = self
//解决循环引⽤ ,这⾥⽤var ⽽不⽤let
//因为weak可能在运⾏时被修改 ——》指向的对象⼀旦被释放,会被设为nil
GCDText { (data) in
//? 可选解包,对象为nil,不会向对象发送getter消息,更安全
//!强⾏解包,如果对象为nil 会发⽣崩溃,⼀般⽤于对象接下来要进⾏计算
print(weakSelf?.view ??  UIView())
}
2.swift解决⽅法,推荐使⽤
GCDText {[weak self] (data) in
print(self?.view ?? UIView())
}
3.unowned;
GCDText { [unowned self](data) in
}
unowned

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。