自定义 uitextfield 的保留循环(强参考)修复?

Retain Cycle (Strong reference) fix for custom uitextfield?

我有一个自定义文本字段 class、"loginTextFields"。我最近注意到我在其中使用这些文本字段的视图控制器没有被释放,我怀疑它与这些文本字段有关......非常感谢任何指导:)我已经查了很多Whosebug 的帖子,但 none 确实帮助了我。

txt字段class:

class LoginTextFields: UITextField, UITextFieldDelegate {

 override init(frame: CGRect) {
    super.init(frame: frame)

    delegate = self
    setConstraints()
  }
}

视图控制器:

class LoginController: UIViewController {
  @IBOutlet weak var usernameTextField: LoginTextFields!
  @IBOutlet weak var passwordTextField: LoginTextFields!

}

我猜想并在 loginTextfield class 中添加了一个 'delete' 方法,试图将所有内容设置为 nil(怀疑委托可能与它有关,而不是解除分配)用户从视图控制器中退出。我希望这会删除任何强引用,但它不起作用

  func delete() {
    self.delegate = nil
    self.text = nil
    self.leftSideIcon.removeFromSuperview() //small icon inside text field
    self.removeFromSuperview()
}

UITextField 在 iOS 11 中有一个已知的保留周期,阻止它被释放。 See this thread on Apple's developer forums 进行分析。

该错误应在 iOS 11.2.5、according to this tweet.

中修复

如果您的文本字段对视图控制器有很强的引用,那可能会导致您的问题。您能否在现在可用的 iOS 11.2.5 beta 3 上进行测试,看看它是否能解决您的问题?