gpt4 book ai didi

ios - -endEditing 与条件语句在关闭键盘时的性能

转载 作者:行者123 更新时间:2023-11-28 22:19:08 24 4
gpt4 key购买 nike

当在背景点击中关闭键盘时,我通常会在我的 Root View 中添加一个点击手势识别器并将其连接到一个 dismissKeyboard: IBAction,它可以是使用以下任一方法实现:

// Method 1

- (IBAction)dismissKeyboard:(id)sender
{
[self.view endEditing:YES];
}

// Method 2

- (IBAction)dismissKeyboard:(id)sender
{
if ([self.firstNameTextField isFirstResponder]) {
[self.firstNameTextField resignFirstResponder];
}
else if ([self.lastNameTextField isFirstResponder]) {
[self.lastNameTextField resignFirstResponder];
}
// And so on for all UITextFields in the view
}

虽然第一种方法很方便,但我很好奇它是否会因为性能影响、Apple 推荐的最佳实践或其他原因而不那么令人满意。第二种方法虽然相当冗长,但仅检查您明确提供的 subview ,并在找到要退出的文本字段后返回。由于这些原因,它看起来仍然是一个有吸引力的选择。

最佳答案

我今晚对这两种辞去第一响应者的方法之间的区别进行了性能测试。

对于第一个测试,我分配并初始化了 4000 个 UITextField,并将它们作为 subview 添加到 UIViewController 的主视图中。然后我将其中一个 UITextFields 设为 firstResponder,然后获取当前的 NSDate。然后我调用了 [self.view endEditing:YES]; 并获取了另一个当前的 NSDate。我计算了开始日期和结束日期之间的时间间隔,并得到以秒为单位的差异:0.000029

在第二个测试中,我分配了一个UITextField,设置为第一响应者。然后我执行相同的 NSDate 计算,但使用 if 语句检查 UITextField 当前是否是第一响应者,然后调用 -resignFirstResponder 如果它确实是第一响应者。时间差(以秒为单位)为:0.000012

这两项测试都是在 iPhone 5s 的设备上运行的。

因此,我们在这里测量的是主线程被阻塞的时间(这会导致应用程序感觉迟钝)。尽管如此,看到使用 -resignFirstResponder 进行测试以查看 textField 是否是第一响应者仅比仅调用 -endEditing:YES 快 .000017 还是令人惊讶的主视图。不过,这表明这两种放弃第一响应者状态的方法之间的性能差异实际上可以忽略不计。

我想知道 Apple 在幕后做了什么?

关于ios - -endEditing 与条件语句在关闭键盘时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com