我有一个包含完成处理程序的网络任务,允许我确定任务是否以及何时成功完成;
func performUpload(url: URL, completionHandler: @escaping (_ response: Bool) -> ()) {
photoSave.savePhotoRemote(assetURL: url) { response in
completionHandler(response)
}
}
我通过使用以下内容从另一个UIView调用此函数;
UploadHelper.shared.performUpload(url: fileAssetPath) { response in
if response {
// do stuff
}
}
我注意到的是,当我捕获响应并执行操作时,调用此函数的类将永远不会消失。但是,如果我将我的功能改为以下内容;
UploadHelper.shared.performUpload(url: fileAssetPath) { response in }
并且不对响应做任何事情,课程将会解散。
我的功能有什么问题?我想相应地捕获响应,但不是以我的课程没有从内存中释放为代价。
你有一个保留周期。打破它。更改
UploadHelper.shared.performUpload(url: fileAssetPath) { response in
if response {
// do stuff
}
}
至
UploadHelper.shared.performUpload(url: fileAssetPath) { [unowned self] response in
if response {
// do stuff
}
}