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

Posted

技术标签:

【中文标题】自定义 uitextfield 的保留周期(强参考)修复?【英文标题】:Retain Cycle (Strong reference) fix for custom uitextfield? 【发布时间】:2018-01-04 04:32:00 【问题描述】:

我有一个自定义文本字段类“loginTextFields”。我最近注意到我使用这些文本字段的视图控制器没有被释放,我怀疑它与这些文本字段有关......非常感谢任何指导:) 我查了很多*** 帖子,但没有一个真正帮助我。

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 类中添加了一个“删除”方法,试图在用户离开视图控制器时将所有内容设置为 nil(怀疑委托可能与它没有解除分配有关) .我希望这会删除任何强引用,但它没有工作

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

【问题讨论】:

不要猜测问题出在哪里,而是使用 Instruments 看看问题到底出在哪里。 【参考方案1】:

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 上进行测试,看看它是否能解决您的问题?

【讨论】:

以上是关于自定义 uitextfield 的保留周期(强参考)修复?的主要内容,如果未能解决你的问题,请参考以下文章

用强弱自我打破保留周期

自定义 UITextField 清除按钮

UITextField如何删除强密码覆盖

【iOS开发】自定义UITextField

关于 iphone 上的自定义 UItextField 包括代表

iOS之UITextField怎么自定义键盘的return键