【发布时间】:2017-06-16 07:40:20
【问题描述】:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CheckoutCell") as! CheckoutCell
let product = shoppingCart[indexPath.row]
var tfQuantity : UITextField!
cell.clickEditAction = { [weak self] celll in
guard let ss = self else { return }
let alert = UIAlertController(title: nil, message: "Enter new quantity", preferredStyle: .alert)
alert.addTextField { (textfield) in
tfQuantity = textfield
}
let okAction = UIAlertAction(title: "OK", style: .default) { (action) in
if tfQuantity.text == ""{
return
}
if let newQuantity = Int(tfQuantity.text){
product.quantity = newQuantity
self.tbvCheckout.reloadData()
}
return
}
alert.addAction(okAction)
self.present(alert, animated: true, completion: nil)
}
return cell
}
这行代码:
self.tbvCheckout.reloadData()
如果我不使用 [weak self] 或 [unowned self],它是否会在当前对象和 UIAlertAction 实例之间创建保留循环? 如果我改用这段代码会怎样:tableView.reloadData()?
【问题讨论】:
-
我猜,它会保留。测试这一点的一个好方法是将记录器添加到 VIewControllers 的生命周期方法中。当 Destroyed (当你从堆栈中解除控制器时)将被调用,你知道,它可以释放对象。如果没有,你可以说有一些对象保留。另外,我不知道这是否是一个好习惯,但是当我在完成/处理程序/调度块中使用
self时,我会创建一个弱自变量 -
是的,因为在这两种情况下,索引行的单元格都会调用无限时间。
-
如果我改用这段代码会怎样:tableView.reloadData()?在这种情况下,我不捕获“self”,tableView 变量是从 UITableView 的委托方法获取的
标签: ios swift retain-cycle