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()
}