当 self 被释放时我应该调用完成处理程序吗
Posted
技术标签:
【中文标题】当 self 被释放时我应该调用完成处理程序吗【英文标题】:Should I call completion handler when self is deallocated 【发布时间】:2018-07-27 22:37:53 【问题描述】:我们可能都使用过以下模式。这可能无关紧要,我只是好奇当self
不再存在时,我是否还应该调用完成处理程序?
var uid: String
func asyncTask(completion: @escaping(Result)->())
anotherAsyncTask() [weak self] (result) in
guard let uid = self?.uid else
completion(.error) // Should I call this???
return
// consume result
【问题讨论】:
【参考方案1】:由于self
被取消初始化,所以调用没有意义
completion(.error) // Should I call this???
因为结果已经在这里return
足够了
【讨论】:
我不同意。返回枚举中存在错误情况。它用于报告错误,而释放 self 就是其中一种错误情况。 @DuncanC 根据你的意见,当用户进入一个VC,然后在回调返回之前快速返回,一个弹窗告诉他一个反馈,这在实际应用中实际上不会发生,操作将其分类为代码作为错误,用户不应该意识到这一点,你也认为自我释放是一个应该报告的错误 公平点。您必须考虑在调用任务的完成处理程序之前释放 self 意味着什么。可能存在一些情况,例如用户关闭的视图控制器,您只想忽略这种情况,或者将成功枚举传递给完成处理程序。这取决于您的设计。以上是关于当 self 被释放时我应该调用完成处理程序吗的主要内容,如果未能解决你的问题,请参考以下文章