相关疑难解决方法(0)

Swift 1.2中的@noescape属性

Swift 1.2中有一个新属性,函数中有闭包参数,文档说:

这表示该参数仅被调用(或在调用中作为@noescape参数传递),这意味着它不能超过调用的生命周期.

在我的理解中,在此之前,我们可以使用[weak self]不让闭包有一个强引用,例如它的类,并且self可以是nil或闭包执行时的实例,但现在,@noescape意味着闭包永远不会被执行如果该课程被去除了资格.我理解正确吗?

如果我是正确的,为什么我会使用@noescape一个常规函数的闭包,当它们的行为非常相似时?

attributes closures swift

75
推荐指数
3
解决办法
1万
查看次数

Swift 中的所有变量或惰性变量初始值设定项都必须包含弱自我吗?

我见过很多使用闭包来初始化 var 或lazy var 的代码,它们在没有弱 self 语法的情况下引用 self 。这不会造成保留周期的风险吗?为什么编译器不标记呢?在使用任何类型的闭包作为安全措施时,是否应该强制使用弱自我或无主自我?

例如

class Test {
  lazy var tableView: UITableView = {
    let tableView = UITableView(frame: self.view.bounds, style: .plain)
    tableView.delegate = self
    tableView.dataSource = self

    return tableView
  }
}()
Run Code Online (Sandbox Code Playgroud)

closures swift3

2
推荐指数
1
解决办法
1787
查看次数

为什么@nonescaping闭包不需要[弱自我]?

根据/sf/answers/2670093331/

原因是立即应用的闭包{}()被视为@noescape。它不会保留捕获的自我。


https://oleb.net/blog/2016/10/optional-non-escaping-closures/

但是,用非转义的闭包创建引用循环是不可能的-编译器可以保证闭包将释放在函数返回时捕获的所有对象。


但是,我仍然不明白为什么@nonescaping不保留闭包self,并且不需要[weak self]?有人可以用更简单的方式解释这个概念吗?

ios swift

1
推荐指数
1
解决办法
112
查看次数

标签 统计

closures ×2

swift ×2

attributes ×1

ios ×1

swift3 ×1