【发布时间】:2018-03-12 18:24:05
【问题描述】:
以下是我使用的代码。使用此代码不会调用 deinit,但是如果我从代码中注释掉这一行 weakSelf?.tableView.reloadData() 会调用 deinit。我做错了吗?
ZLNetworkHelper.sharedManager.getUserSavedAddress { (response) in
print("getUserSavedAddressFinished")
ZLProgressIndicator.stopAnimation()
if response.isSuccess && response.value != nil {
weak var weakSelf = self
guard weakSelf != nil else {
return
}
weakSelf!.address = response.value!.sorted(by: {$0.isDefault && !$1.isDefault})
weakSelf!.isExistingAddressSectionExpanded = false
if weakSelf!.address.count == 0 {
weakSelf!.title = LocalizationUtility.RCLocalizedString("ADD_ADDRESS")
}
DispatchQueue.main.async {
weakSelf!.tableView.reloadData()
}
if completion != nil {
completion!(true)
}
}
else {
let message = response.error?.localizedDescription
ZLCustomAlertVC.presentAlertInVC(self, withErrorMessage:message)
}
}
【问题讨论】:
-
我知道你确实使用了
guard,但是 FWIW 因为它是一个异步调用,你的强制解包仍然可能崩溃!请参阅this 评论和完整答案 -
@Honey 感谢您提供此信息,真的很有帮助。
标签: ios swift retain-cycle