在闭包中调用函数时的快速强链接

Posted

技术标签:

【中文标题】在闭包中调用函数时的快速强链接【英文标题】:swift strong link when a function is called within a closure 【发布时间】:2018-01-10 09:25:29 【问题描述】:

我对这段代码有疑问:

func sendDataToBackend()  

    Alamofire.request(MoneyCupUsersBackEndRouter.sendBI(BudgetInsightConnectionData(budgetInsightResponse: (self.BudgetInsightJSON)!, budgetInsightPermanentToken: (self.permanentToken)!, srcDate: userData!.lastUpdatedAt))).validate().responseString
         [weak self] response in

            switch response.result
            case .success( _):
                DispatchQueue.main.async 
                    SVProgressHUD.dismiss()
                    _ = self?.navigationController?.popToRootViewController(animated: true)

                

            case .failure(let error):
                self?.showError(title: "ERROR SENT DATA BACKEND", message: "Erreur lors de l'envoi des données au Backend", error: error)

            
    




func showError(title: String, message: String, error: Error) 
    print(title)
    print(error)
    DispatchQueue.main.async 
        SVProgressHUD.dismiss()
        let alert = UIAlertController(title: "erreur", message: message, preferredStyle:.actionSheet)
        alert.addAction(UIAlertAction(title: "OK", style: .default)
         Void in
            _ = self.navigationController?.popToRootViewController(animated: true)
        )
        self.present(alert, animated: true, completion: nil)
    



函数 showError 在闭包中调用。但该函数也处理 self 对象。由于在闭包中调用了 showError,我是否通过调用创建了对 self 的强引用?如果是这样,我是否可以解决问题?

【问题讨论】:

看看***.com/questions/41991467/…。 【参考方案1】:

您的代码没有问题,因为showError 被弱捕获,DispatchQueue.main.async 闭包不会导致保留循环。

【讨论】:

以上是关于在闭包中调用函数时的快速强链接的主要内容,如果未能解决你的问题,请参考以下文章

闭包函数与装饰器

在chrome开发者工具中观察函数调用栈作用域链与闭包

发出调用快速完成处理程序关闭的问题

函数与参数,闭包

11函数进阶---闭包

javascript进阶笔记