为什么我不能在没有内存泄漏的情况下将相同的 UIView 实例应用于两个单独的 UITextField?

Why can't I apply the same UIView instance to two separate UITextFields without a memory leak?

我真的很想问为什么首先会出现内存泄漏。

我有一个带有两个简单 UITextField 对象的视图控制器。我想要一些左缩进,所以我在为两者创建 IBOutlet 后将以下内容应用于它们:

var textFieldIndentation = UIView(frame: CGRectMake(0, 0, 20, 0))
self.usernameField.leftViewMode = UITextFieldViewMode.Always
self.usernameField.leftView = textFieldIndentation
self.passwordField.leftViewMode = UITextFieldViewMode.Always
self.passwordField.leftView = textFieldIndentation

大约 15 秒后,我注意到我的应用程序占用了超过 1.5GB 的 RAM,并且一直在不停地使用 100% 的处理器。

为什么会这样?

不要对两个 UITextField 对象使用与 leftView 相同的 UIView 实例。由于您已将 leftViewMode 设置为 Always,它将重复从一个 UITextField 实例中删除 textFieldIndentation 对象,以便将其添加到另一个 UITextField 实例.

简单做

var textFieldIndentationU = UIView(frame: CGRectMake(0, 0, 20, 0))
var textFieldIndentationP = UIView(frame: CGRectMake(0, 0, 20, 0))
self.usernameField.leftViewMode = UITextFieldViewMode.Always
self.usernameField.leftView = textFieldIndentationU
self.passwordField.leftViewMode = UITextFieldViewMode.Always
self.passwordField.leftView = textFieldIndentationP