Rol*_*ien 5 retain-cycle swift
我在跟踪保留周期时遇到问题。我认为这与我订阅事件的方式有关。伪代码是这样的:
override func viewDidLoad() {
func handleEvent() {
self.doSomething()
}
subscribe("eventName", block: handleEvent)
}
deinit {
unsubscribe("eventName")
}
Run Code Online (Sandbox Code Playgroud)
这会为自己/我的 ViewController 创建一个保留周期吗?如果是这样,我该如何解决?如果我使用的是闭包,我可以使用 [weak self],但是由于我正在传递一个函数,所以无论如何都可以使用 [weak self] 等价物吗?
长话短说,您的代码确实保留了引用。(handleEvent->viewDidLoad->self),http://blog.xebia.com/function-references-in-swift-and-retain-cycles/有一些避免该问题的通用策略。我的建议是创建一个函数引用,而不是声明一个函数:
let eventHandler: () -> () = { [weak self] in
self?.doSomething()
}
subscribe("eventName", block: eventHandler)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |