【发布时间】:2020-10-23 17:11:36
【问题描述】:
[self] 是一个新术语,我们可以在块中使用它来避免使用 self 关键字。那么这和[weak self] 有什么不同呢? [self] 是否负责保留周期?
我找不到太多这方面的信息,所以任何简单的解释示例都将受到高度赞赏。
【问题讨论】:
-
[self]是强捕获,而[weak self]是弱捕获。这只是为了方便而不是在闭包中使用self.前缀 -
proposal 本身应该很好地涵盖了这些更改。
-
感谢您的回答。我有点困惑,为什么我要在块内使用强捕获
[self],因为有内存泄漏的机会,[weak self]可以让我们免于这种情况? -
在某些情况下需要强大的捕获者 - 即当您希望闭包在对象执行之前保持活动状态时。
-
创建保留周期时可能会发生泄漏。如果
self拥有闭包,并且闭包强烈捕获self,则闭包和self都不能从内存中释放。通常,循环并不那么直接。例如self拥有一个服务,该服务拥有一个拥有self等的闭包。
标签: swift