如何在不结束保留周期的情况下安全地将自己分配给自己的委托?

How to safely assign yourself to your own delegate without ending in retain cycle?

我有一个 class SomeTextFieldClass,它是 UITextField class 的子class。我用它来对 UITextField 视图进行视图自定义,我还想用它来处理对用户输入内容的限制,例如用户只能输入带 2 个小数位的数字等。为此,我使用 UITextFieldDelegate textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 的委托。当我在我的 SomeTextFieldClass 初始化期间 assingn self.delegate = self 时,我可以使该功能正常工作。但是我有一种强烈的感觉,它会创建一个保留周期,我想避免这种情况。还有其他方法吗?在 class 本身上使用委托方法的最佳实践是什么?基本上我只想访问 UITextField 子 class 本身的 UITextField 委托方法(例如 shouldChangeCharactersIn)。谢谢

代表本质上是 'weak'。因此,在分配委托时,保留计数不会增加 1。因此,没有创建保留循环。

看看这个:https://medium.com/macoclock/delegate-retain-cycle-in-swift-4d9c813d0544

我认为您应该在视图控制器中将委托设置为“textfield.delegate = self”。然后,你应该这样处理它;

extension UIViewController: SomeTextFieldClassDelegate {
  // protocol functions are here
}

在 SomeTextFieldClass 中,委托应定义为“弱”;

weak var delegate: SomeTextFieldClassDelegate?

如果您提供更多的代码,您可以获得更好的帮助。但是看起来这段代码有问题; “self.delegate = 自我”。我猜你将文本字段分配给它自己的委托。