【发布时间】:2018-06-03 08:08:53
【问题描述】:
我无法跟踪保留周期。我认为这与我订阅事件的方式有关。伪代码是这样的:
override func viewDidLoad() {
func handleEvent() {
self.doSomething()
}
subscribe("eventName", block: handleEvent)
}
deinit {
unsubscribe("eventName")
}
这会为自己/我的 ViewController 创建一个保留周期吗?如果是这样,我该如何绕过它?如果我使用的是闭包,我可以使用 [weak self],但是由于我正在传递一个函数,所以无论如何要使用 [weak self] 等价物吗?
【问题讨论】:
-
那个问题是关于闭包的,我问的是使用函数作为闭包。不能将弱自身与函数一起使用。
-
读错了你的代码……我的错。就一秒
-
我们需要知道
subscribe对传递的闭包做了什么,以确定您是否有保留周期。如果它只是调用它而不存储它或将它捕获在另一个闭包中然后存储(在self或self有强烈引用的东西上),那么就没有保留周期。如果它确实存储/捕获,那么是的,你有一个保留周期。如果您可以将代码归结为minimal reproducible example,那将是最有帮助的。 -
“我在跟踪保留周期时遇到问题” Instruments 告诉你什么?
标签: swift retain-cycle