swift学习--闭包的循环引用解决
2017-07-06 10:50
489 查看
一、什么是循环引用、怎么发生的
循环引用就是当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
循环引用就是当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
相关文章推荐
- Swift中解决闭包循环引用的几种方式
- 15.9 Swift解决闭包引起的循环强引用问题
- swift闭包中解决循环引用的问题
- swift学习笔记(14)- 解决循环强引用
- Swift 闭包中循环引用解决方式
- swift之闭包循环引用问题及解决方式
- swift-闭包产生的循环引用以及解决办法
- swift 基础学习(8) - 闭包解除循环引用
- swift中闭包 OC中Block 解决循环引用
- Swift学习记录 -- 14.闭包的使用和解决循环引用方法
- swift 闭包循环引用的解决办法
- [swift]-闭包解决循环引用的三种写法
- swift中解决闭包循环引用的几种方式
- 解决swift中闭包中循环引用self 的问题
- swift中防止闭包循环引用
- Swift中闭包的循环引用
- 闭包的循环引用解决
- swift中闭包的循环引用
- Swift闭包循环引用
- 闭包的循环引用 与 解决(三种方法)