当前位置: 首页 > 面试题库 >

延迟使用InstantiateViewControllerWithIdentifier而不执行performSegueWithIdentifier吗?

郎曾笑
2023-03-14
问题内容

下面的代码用于将另一个视图控制器推入导航堆栈。

使用时instantiateViewControllerWithIdentifier,第一次的速度明显较慢(〜3秒),但随后的每次速度都相当快。其他SO职位建议确保序号发生在代码完成的主线程上,但这不能解决问题。

但是,使用performSegueWithIdentifier不会引起延迟。

第一次和后续推送的viewDidLoad代码SendViewController相同。

尝试消隐viewDidLoad目标视图控制器,但仍然存在,instantiateViewControllerWithIdentifier但不存在滞后performSegueWithIdentifier

如何解决延迟instantiateViewControllerWithIdentifier

没有延迟:

@IBAction func buttonTapped(sender: UIButton) {
    performSegueWithIdentifier(SendSegue, sender: self)  
}

首次显示SendViewController时导致延迟:

@IBAction func buttonTapped(sender: UIButton) {
    dispatch_async(dispatch_get_main_queue()) {
        let vc = self.storyboard!.instantiateViewControllerWithIdentifier(self.SendViewControllerID) as! SendViewController
        self.navigationController!.pushViewController(vc, animated: true)
    }   
}

问题答案:

问题被隔离到目标视图控制器中存在UITextField,也就是说,删除UITextField可以消除滞后。

然后,将其进一步隔离为存在自定义字体。

换句话说,在UITextField上使用系统字体而不是自定义字体可以消除延迟。没有解释为什么,但是有效。



 类似资料:
  • 问题内容: 有什么技巧可以基于Redis延迟任务执行(即计划)? 也许一些聪明的方法可以将BLPOP延迟给定的秒数? 问题答案: 您可以使用名称中带有时间成分的多个LIST环。作为时间成分,您可以采用当前秒(0-59)。 您总是将任务添加到当前秒的列表中。要获得作业,请仅在保证内容早于给定秒数的那些列表上执行BLPOP(低超时)。 如果您在多个主机上工作,则必须注意时钟是同步的(NTP)。

  • 问题内容: 有一种方法可以配置javascript方法以立即执行该方法,然后使用计时器执行 问题答案: 第一次直接直接调用函数是最简单的: 但是,有充分的理由要避免-尤其是在某些情况下,整个事件负荷可以彼此紧接着立即到达而没有任何延迟。另一个原因是,如果要停止循环,则必须显式调用,这意味着必须记住原始调用返回的句柄。 因此,另一种方法是使用以下方法触发自己的后续调用: 这样可以确保两次调用之间 至

  • 问题内容: 运行上面的代码后,未执行,我的意思是文本字段未将其文本设置为“ START”, 为什么? 如何解决呢? 问题答案: 请记住,该按钮在JavaFX线程上被调用,因此您实际上将UI线程暂停了5秒钟。在这五秒钟的末尾取消冻结UI线程时,将同时应用这两个更改,因此最终只能看到第二个。 您可以通过在新线程中运行以上所有代码来解决此问题:

  • 当我像这样定义和调用客户机方法时: 关于更多上下文:在我的例子中,我只希望在CacheFlux onCacheMissResume被触发时执行它:

  • 最初,我在运行拓扑时只分配了1个executor给QueryNormalizer。执行潜伏期为8.952,处理潜伏期为12.857。 为了更快,我将QueryNormalizer中的执行程序数更改为4。执行延迟更改为197.616,处理延迟更改为59.132。 根据执行延迟的定义-元组在执行方法中花费的平均时间。execute方法可以在不发送元组的Ack的情况下完成。 此外,处理延迟是否应始终低于

  • 问题内容: 是否有任何类似于jQuery的JavaScript方法或(将脚本的执行延迟特定时间)? 问题答案: 有以下内容: 可以在执行该功能之前经过的时间。