如何使用 1 UITextField 跟踪 3 个输入字符串

Posted

技术标签:

【中文标题】如何使用 1 UITextField 跟踪 3 个输入字符串【英文标题】:how to keep track of 3 input strings using 1 UITextField 【发布时间】:2010-11-02 17:16:31 【问题描述】:

如何使用 1 UITextField 跟踪 3 个输入字符串?

我使用一个 UITextField 为用户输入在 3 种不同的输入类型(出发、航空公司、到达)之间切换。我将这 3 个中的每一个都保存在自己的 NSMutableString 对象中,如下所示(取决于输入的内容或其他内容):

depart = [input.text copy];
arrive = [input.text copy];
airline = [input.text copy];

我使用

设置 UITextField 的值(取决于用户输入的内容)
input.text = [arrive copy];
input.text = [depart copy];
input.text = [airline copy];

我使用input.text copy 成功跟踪了 3 个输入中的每一个,但在运行Instruments 泄漏测试时我看到了内存泄漏问题。我有一种感觉,这是由于我对使用 copy 的不当清理造成的。如何保留每个输入字符串而不引起内存泄漏问题?

【问题讨论】:

使用方法 copy 创建一个新对象,而不是仅仅保留现有值。 input.text = [航空公司副本];没问题,因为 .text 的值是通过属性访问的,之前的值被释放了。航空公司 = [input.text 副本];会导致内存泄漏。 【参考方案1】:

将您的字符串转换为保留的属性。

@property (retain) NSString *airline;

使用 self 设置属性的值。

self.airline = input.text;

不使用self,你是手动设置值并绕过属性,所以文本不会被保留。

在你的 -(void)dealloc 方法中释放对象

然后,当您编辑特定信息时,您可以使用属性来填充文本字段

input.text = self.airline;

这有意义吗?

【讨论】:

所以不是@property (nonatomic, retain) NSMutableString *airline;,而是@property (nonatomic, copy) NSMutableString *airline; ? 等等,你改变了你的问题,我不确定这是你想要的 不,你在没有复制的情况下走在正确的轨道上。等待我的新答案【参考方案2】:

Leaks 工具应该会告诉您泄漏的位置。

这很明显。 您应该在分配新数据之前释放旧数据。 因此,所有的调用都像

depart = [input.text copy];

应该是这样的

[depart release]; depart = [input.text copy];

你还应该release类的dealloc方法中的所有字符串。

【讨论】:

泄漏工具显示泄漏在 Foundations 库中,这极不可能 同意,泄漏并不总是准确的。 Valgrind 更好,虽然它只适用于模拟器。

以上是关于如何使用 1 UITextField 跟踪 3 个输入字符串的主要内容,如果未能解决你的问题,请参考以下文章

跟踪哪个 UITextField 当前处于编辑模式

如何使用 shouldChangeCharactersInrange 方法验证满足 5 个不同条件的 UITextfield?

如何实现占位符文本在 UITextField 中逐个字符消失

显示和滚动验证错误到 UITableView 内的第 n 个 UITextfield

如何让 UITextField 只允许使用 Swift 3 的整数?

将 uitextfield 3 空间中的光标向右移动