完成处理程序导致未调用Deinit

时间:2019-04-29 20:15:30

标签: swift completionhandler

我有一个包含完成处理程序的网络任务,可以让我确定任务是否以及何时成功完成;

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

我要注意的是,当我捕获 response do stuff 时,调用此函数的类将永远不会取消初始化。但是,如果我将功能更改为以下内容;

UploadHelper.shared.performUpload(url: fileAssetPath) { response in }

并且不对响应做任何事情,该类将取消初始化。

我的功能出了什么问题?我想相应地捕获响应,但不以不从内存中释放我的类为代价。

1 个答案:

答案 0 :(得分:1)

您有一个保留周期。打破它。更改

UploadHelper.shared.performUpload(url: fileAssetPath) { response in
    if response {
       // do stuff
    }
}

UploadHelper.shared.performUpload(url: fileAssetPath) { [unowned self] response in
    if response {
       // do stuff
    }
}