自定义uitextfield的保留周期(强参考)修复?

时间:2018-01-04 04:32:01

标签: ios swift delegates uitextfield

我有一个自定义文本字段类“loginTextFields”。我最近注意到我使用这些文本字段的视图控制器没有被解除分配,我怀疑它与这些文本字段有关...任何指导都非常感谢:)我已经查了不少stackoverflow帖子,但没有人真的帮助我。

txt字段类:

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类中添加了一个'delete'方法,试图将所有内容设置为nil(怀疑代理可能与它有关,而不是取消分配)当用户从视图控制器中移出时。我希望这会删除任何强大的引用,但它不起作用

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

1 个答案:

答案 0 :(得分:3)

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

该错误应该在iOS 11.2.5中修复,according to this tweet

如果您的文本字段具有强烈的引用回到视图控制器,则可能导致您的问题。你现在可以测试iOS 11.2.5 beta 3,看看它是否解决了你的问题?