如何使用 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 个输入字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 shouldChangeCharactersInrange 方法验证满足 5 个不同条件的 UITextfield?
如何实现占位符文本在 UITextField 中逐个字符消失
显示和滚动验证错误到 UITableView 内的第 n 个 UITextfield