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

时间:2015-03-09 01:13:52

标签: ios swift uiview memory-leaks

我真的问为什么会出现内存泄漏的原因。

我有一个带有两个简单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%的处理器。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

对于UIView个对象,请勿使用与leftView相同的UITextField实例。由于您已将leftViewMode设置为Always,因此它将从一个textFieldIndentation实例中重复删除UITextField对象,以便将其添加到另一个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