UIBarButton的目标是否会创建保留周期?

时间:2016-07-11 16:52:19

标签: cocoa-touch

我试图找出保留周期的原因,并发现这可疑。这对我来说是一个有用的模式,但这段代码会创建一个保留周期吗?

myVC: UIViewController {
  private lazy var cancelButton: UIBarButtonItem = {
    return UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(onTapCancel))
  }()
}

我无法判断API是否会以弱或强的方式保留对self的引用。

1 个答案:

答案 0 :(得分:1)

不,Apple使用的目标 - 动作机制通常不允许控件因此而保留其目标,尽管找到一个可靠的参考有点困难。

如果您选中the documentation for UIControl,则会看到:

  

控件不会将对象保留在目标参数中。在将目标对象附加到控件时,您有责任保持对目标对象的强引用。

如果您选中Concepts in Objective-C Programming,则会看到:

  

控制对象不会(也不应该)保留其目标。但是,发送操作消息的控件的客户端(通常是应用程序)负责确保其目标可用于接收操作消息。