为什么我不能在没有内存泄漏的情况下将相同的 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
我真的很想问为什么首先会出现内存泄漏。
我有一个带有两个简单 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