【发布时间】:2014-07-12 14:47:21
【问题描述】:
我有以下viewDidLoad 方法:
- (void)viewDidLoad {
NSLog(@"didLoad");
if (self.loginField.text.length > 0) [self.passwordField becomeFirstResponder];
else [self.loginField becomeFirstResponder];
}
我还在viewWillAppear 和viewDidAppear 中添加了日志时间。
在某些情况下,推送动画需要很长时间。我已经用注释(和没有)if-else 行测量了时间(见:时间如下所示)。我不知道在viewWillAppear 和viewDidAppear 调用之间会降低我的应用程序的速度。
我试图用 Time Profiler (Instruments) 分析这段代码,但它什么也没显示。我不知道我该怎么做才能更快地展示我的观点。有什么想法吗?
使用 becomeFirstResponder,首先调用
2014-07-11 16:51:41.090 didLoad
2014-07-11 16:51:41.133 willAppear
2014-07-11 16:51:44.223 did appear
diffAppear = 3090ms
使用 becomeFirstResponder,第二次调用
2014-07-11 16:52:01.370 didLoad
2014-07-11 16:52:01.400 willAppear
2014-07-11 16:52:02.109 did appear
diffAppear = 709ms
不用 becomeFirstResponder,先调用
2014-07-11 16:57:21.720 didLoad
2014-07-11 16:57:21.754 willAppear
2014-07-11 16:57:22.420 did appear
diffAppear = 666ms
没有 becomeFirstResponder,第二次调用
2014-07-11 16:57:31.851 didLoad
2014-07-11 16:57:31.870 willAppear
2014-07-11 16:57:32.541 did appear
diffAppear = 671ms
【问题讨论】:
-
–becomeFirstResponser通常会为需要时间的实际对象加载 输入视图。另一方面,您应该在 您的视图正确位于导航堆栈和视图层次结构中之后调用此方法,这意味着在这种情况下:in 或 在–viewDidAppear:方法之后,而不是更早。 -
但是键盘不会立即出现
-
是的,确实如此,但这不是一个好的做法,而且正如您所见 - 非常慢。
-
也许这不是一个好习惯,但我的解决方案会立即显示键盘,并且在更快的设备(4s 及更高版本)上几乎不可见。
-
如果速度在更快的设备上对您来说还可以,那么我不明白您的问题......较慢的设备显然比较快的兄弟设备执行相同的过程慢。你唯一能做的就是重新组织你的代码,找到一些平衡点,尽量不要对速度较慢的设备施加太大压力。
标签: ios objective-c uitextfield