我写了一个状态机free (hh); free(ampm); free(sub);
,并添加了添加class
处理程序的可能性:
onChange
我正在视图控制器中添加这样的更改侦听器:
private var handlers = [((UserState) -> Void)]()
func onChange(handler: @escaping ((UserState) -> Void)) {
self.handlers.append(handler)
}
func changeState(to newState: UserState) {
print($0.self)
$0(newState)
}
闭包现在是添加了它的视图控制器还是状态机所拥有?我必须添加对override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserStateMachine.shared.onChange { newState in
self.setIcon(newState.premium)
}
}
元素的弱引用吗?
答案 0 :(得分:1)
要非常直接地回答您的第一个问题,闭包由您的状态机类拥有。状态机保留了闭包,闭包捕获了对视图控制器的强烈引用。
是的,您将需要在此处添加一个弱引用,因为您的共享状态机似乎是一个永久存在的单例,除非您有某种机制可以在注销视图控制器之前注销并删除闭包。
但是,单例保留对视图控制器的引用几乎没有任何意义,因此,我建议添加一个[weak self]
。