Swift中解决闭包循环引用的几种方式
2017-08-14 17:29
393 查看
Swift 属性的默认是强引用
响应cell上的按钮事件
在cell中写一个闭包,VC的cell代理中调用
var switchCallBack:((_ sender:Bool)->(Void))?
方式一:[weak self] 【weak self】 和 __weak typeof(self) 作用类似 -->对象被回收时,内存地址会自动置nil,更佳安全,推荐使用这种方式
cell.switchCallBack = { [weak self] (isOn) in
self?.orderModel?.takeMySelf = isOn
self?.orderDetailModel?.takeMyself = isOn
self?.tableView.reloadData()
}
方式二: 【unowned self】 和 __unsafe__retained作用类似—>对象被回收时,内存地址不会自定指向nil,会造成野指针访问
cell.switchCallBack = { [unowned self] (isOn) in
self?.orderModel?.takeMySelf = isOn
self?.orderDetailModel?.takeMyself = isOn
self?.tableView.reloadData()
}
方式三:OC式的解决方式
弱引用的对象,有一次执nil的机会
weak var weakSelf = self
cell.switchCallBack = { (isOn) in
weakSelf.orderModel?.takeMySelf = isOn
weakSelf.orderDetailModel?.takeMyself = isOn
weakSelf.tableView.reloadData()
}
响应cell上的按钮事件
在cell中写一个闭包,VC的cell代理中调用
var switchCallBack:((_ sender:Bool)->(Void))?
方式一:[weak self] 【weak self】 和 __weak typeof(self) 作用类似 -->对象被回收时,内存地址会自动置nil,更佳安全,推荐使用这种方式
cell.switchCallBack = { [weak self] (isOn) in
self?.orderModel?.takeMySelf = isOn
self?.orderDetailModel?.takeMyself = isOn
self?.tableView.reloadData()
}
方式二: 【unowned self】 和 __unsafe__retained作用类似—>对象被回收时,内存地址不会自定指向nil,会造成野指针访问
cell.switchCallBack = { [unowned self] (isOn) in
self?.orderModel?.takeMySelf = isOn
self?.orderDetailModel?.takeMyself = isOn
self?.tableView.reloadData()
}
方式三:OC式的解决方式
弱引用的对象,有一次执nil的机会
weak var weakSelf = self
cell.switchCallBack = { (isOn) in
weakSelf.orderModel?.takeMySelf = isOn
weakSelf.orderDetailModel?.takeMyself = isOn
weakSelf.tableView.reloadData()
}
相关文章推荐
- swift中解决闭包循环引用的几种方式
- swift之闭包循环引用问题及解决方式
- Swift 闭包中循环引用解决方式
- swift闭包中解决循环引用的问题
- swift中闭包 OC中Block 解决循环引用
- swift-闭包产生的循环引用以及解决办法
- swift学习--闭包的循环引用解决
- [swift]-闭包解决循环引用的三种写法
- swift 闭包循环引用的解决办法
- 15.9 Swift解决闭包引起的循环强引用问题
- 解决swift中闭包中循环引用self 的问题
- JavaScript的闭包问题(闭包解决引用循环变量的问题)
- Swift与OC真正去理解Block解决循环引用的技巧
- Swift 闭包循环引用安全
- Swift:(十一)、构造器、自动引用计数、循环引用问题解决、类型转换
- 14.6 Swift中weak解决循环强引用
- IOS闭包循环引用(Swift)
- 解决block循环引用的三种方式
- Xcode8调试黑科技:Memory Graph实战解决闭包引用循环问题
- swift学习笔记(14)- 解决循环强引用