【问题标题】:Objective-C __strong equivalent in SwiftSwift 中的 Objective-C __strong 等价物
【发布时间】:2016-05-18 17:54:31
【问题描述】:

在 Objective-C 中,我们将值转换为 __weak 以避免在某些情况下保持循环。

This post 解释了为什么 __strong 有用

__weak typeof (self) weakSelf = self;

self.block = ^{
    [weakSelf methodA];        
};

我们是否特别需要 Swift 中的 __strong 自等效项,它是否可用?如果是这样,请问语法是什么?

【问题讨论】:

标签: swift


【解决方案1】:

在 Swift 中没有像 __strong 这样的东西,因为默认情况下所有变量都是强变量。

以下是上述代码的 Swift 等效项:

self.block = { [weak self] in
  self?.methodA()
}

如果您想在块执行期间保持self 处于活动状态,您可以执行以下操作:

self.block = { [weak self] in
  guard let strongSelf = self else { return }
  strongSelf.methodA()
}

在上面的代码中,strongSelf 将在块内创建一个对weakSelf 的强引用,这样弱引用就不会在强引用还活着时被释放(在我们的例子中,直到块完成执行).

请注意,以上选项均不会导致保留周期

【讨论】:

  • 可以公平地说,坚持弱自我引用的强自我引用会导致短暂的保留周期吗?一旦块完成执行,保留周期就会被打破。你怎么看?
  • 是的,可以肯定地说,该块拥有一个强引用,所以那里有一个短暂的循环,可以让自己保持活力。但主要的一点是,它不应该导致某种死锁,从而导致 self 永远不会被释放。使用弱关键字通过创建对弱指针的强引用来确保永远不会发生这种情况。
  • 感谢您回复我。
猜你喜欢
  • 2014-07-28
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多