【问题标题】:What does the [something] syntax in Swift mean when working with closures?使用闭包时,Swift 中的 [something] 语法是什么意思?
【发布时间】:2019-11-27 18:09:23
【问题描述】:

通常当在闭包中捕获对属性的引用时,我会做这样的事情 -

foo { [weak self] in
    self?.bar()
}

但我也看到这个写成-

foo { [bar] in
    bar()
}

[bar] 是什么意思,这与捕获 weak self 有何不同?

【问题讨论】:

标签: swift closures self


【解决方案1】:

[bar] 部分是capture list

它指示闭包如何捕获值。当您在关键字 in 之前的括号中输入变量时,闭包不再引用原始变量,而是在闭包块中创建自己的副本。

【讨论】:

    【解决方案2】:

    这是一个捕获列表,which can be used to resolve strong reference cycles。 如果闭包通过引用捕获变量(它对所有引用类型都这样做),则闭包可以创建一个强引用循环,因为它是最后一个持有对捕获变量的引用的对象。

    weak 引用意味着它不会增加对象的引用计数,因此如果对对象的最后一个引用是弱引用,则其引用计数为 0,因此 ARC 将释放它。这对于转义闭包特别有用,闭包的生命周期可能比引用/捕获对象的生命周期长,因此闭包最终可能持有对该对象的最后一个引用,因此不允许 ARC 释放它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 2016-07-08
      • 2018-10-28
      • 2013-11-02
      • 1970-01-01
      相关资源
      最近更新 更多