【问题标题】:If "self" is the ViewController, should you almost always use [weak self]?如果“self”是 ViewController,你应该几乎总是使用 [weak self] 吗?
【发布时间】:2015-10-12 23:05:30
【问题描述】:

我一直在每个回调中使用 [weak self],以防控制器展开并且“self”可能变为 nil。

这是正确的方法吗?

当我应该使用 [unowned self] 或都不使用时有哪些示例...假设“self”是一个会经常展开的 ViewController?

【问题讨论】:

标签: ios swift oop memory-management memory-leaks


【解决方案1】:

如果在取消初始化self 时仍会调用回调,则使用[weak self] 是正确的。使用[unowned self] 的原因是您知道在self 消失后永远不会调用回调,但强烈捕获self 会导致保留周期。

[unowned self] 的一个例子是闭包的存在取决于self 的存在,那么很明显,如果self 消失了,闭包也将消失并且不会被调用.

【讨论】:

  • 为了安全起见,我应该一直使用 [weak self] 吗?假设 self 是一个视图控制器。如果我到处使用弱自我会有什么影响?内存会“更慢”地释放吗?
  • @TIMEX 好吧,如果您不确定unowned self 在特定情况下是否安全,请使用weak self。闭包会变得更复杂一些(因为weak 使self 成为可选的)并且可能对性能有理论上的影响,但是考虑到使用__weak 引用在Objective-C 中已经很常见了,这不会是灾难性的(还有,过早优化=)。
猜你喜欢
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
相关资源
最近更新 更多