【问题标题】:Swift: does capturing a function parameter, within a closure, hold it strongly?Swift:在闭包中捕获函数参数是否牢固地保持它?
【发布时间】:2016-09-06 11:59:54
【问题描述】:

在闭包中捕获函数参数

func someFunction(tableView: UITableView) -> (() -> ()) {

    return { [weak self] in

        self?.someOtherFunction() {
            tableView.performTask()
        }

    }

}

如果是这样,在上面的示例中,确保 tableView 参数弱的语法是什么?

【问题讨论】:

    标签: ios swift memory-management


    【解决方案1】:

    默认情况下强闭包捕获参数。在最常见的闭包情况下,您访问在self 中声明的属性,而不捕获其他引用,因此将self 设为弱就足够了。在您的情况下,您需要扩展关闭捕获列表并将tableView 包含在其中:

    func someFunction(tableView: UITableView) -> (() -> ()) {
        return { [weak self, weak tableView] in
            self?.someOtherFunction() {
                tableView?.performTask()
            }
        }
    }
    

    您可以在ARC 文档中阅读有关捕获列表的更多信息:

    您解决了闭包和类之间的强引用循环 例如,通过将捕获列表定义为闭包的一部分 定义。捕获列表定义捕获时要使用的规则 闭包体内的一个或多个引用类型。与两个类实例之间的强引用循环一样,您声明每个 捕获的引用是弱引用或无主引用,而不是 强参考。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2020-09-02
      • 2020-05-04
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多