我试图找出保留周期的原因,并发现这可疑。这对我来说是一个有用的模式,但这段代码会创建一个保留周期吗?
myVC: UIViewController {
private lazy var cancelButton: UIBarButtonItem = {
return UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(onTapCancel))
}()
}
我无法判断API是否会以弱或强的方式保留对self
的引用。
答案 0 :(得分:1)
不,Apple使用的目标 - 动作机制通常不允许控件因此而保留其目标,尽管找到一个可靠的参考有点困难。
如果您选中the documentation for UIControl
,则会看到:
控件不会将对象保留在目标参数中。在将目标对象附加到控件时,您有责任保持对目标对象的强引用。
如果您选中Concepts in Objective-C Programming,则会看到:
控制对象不会(也不应该)保留其目标。但是,发送操作消息的控件的客户端(通常是应用程序)负责确保其目标可用于接收操作消息。