【发布时间】:2016-03-23 05:58:08
【问题描述】:
在我的 viewController 中,大约有 15 个按钮是通过 Main.storyboard 中的 Interface Builder 创建的,其余的按钮是我以编程方式创建的。为避免延迟,我将大部分内容发送到后台线程,但所有 UI 内容,包括 15 个按钮,都没有,因为它们不是线程安全的。我想知道这 15 个按钮的确切加载时间。是在viewDidLoad 之前,在viewDidLoad 和viewDidAppear 之间,等等?此外,由于我仍然有一些延迟和屏幕冻结,我尝试在一个方法中初始化这个 UIViewController 的大部分内容,并在 AppDelegate 中调用这个方法,以便我将耗时的任务移到应用程序启动时(而且看起来真的为了提高性能和打印语句确实表明大多数繁重的代码是在应用程序启动时调用的,而不是在我展示视图控制器时调用)。
但是,每次我第一次获得这个 viewController 时,仍然会有一个初始的重载。当我回到 rootViewController 并再次回到这个 ViewController (通过 presentViewController(viewController, animated: false, completion:nil on rootViewController 和 self.dismissViewController(animated:false, completion:nil) on ViewController )时,我访问它的所有时间都不再冻结(这是我所有的来源痛苦......我不明白为什么我第一次访问 ViewController 时只花时间,而不是在第一次之后访问它的所有其他时间,即使所有 viewDidLoad, viewWillAppear, viewDidAppear 除了超级之外都没有代码类是必需的)。
因此,所有这些都让我怀疑这种最初的繁重负载是否来自通过 Interface Builder 创建的元素。这是我能想到的解释这种行为的唯一可能原因。这是 Instruments 屏幕截图,显示了我第一次访问 viewController 时负载很重的行为,并且每隔一次我在前面提到的第一次访问它时,只有一点不影响 UI 的小偷看(这是我想要的)时间。
Instruments Sample Screenshot
【问题讨论】:
标签: ios swift multithreading interface-builder instruments