gpt4 book ai didi

ios - 在不延迟 UIViewController segue 的情况下运行 CPU 密集型代码?如何在 UIViewController 出现后*仅执行一次代码?

转载 作者:行者123 更新时间:2023-11-29 00:59:44 24 4
gpt4 key购买 nike

点击 ViewController1 中的按钮会将应用程序转至 ViewController2。

点击按钮还会触发稍微占用 CPU 资源的操作。 (即合并多个图像并将结果写入磁盘)。在点击按钮之前,此操作无法启动。

副作用是糟糕的用户体验。 ViewController1 按钮突出显示的时间更长,并且 Segue 明显延迟。

将密集代码移至 ViewController2 的 viewDidLoad函数似乎没有帮助,因为它会产生延迟,但在 ViewController2 一侧而不是 ViewController1。

将代码移至 ViewController2 的 viewDidAppear似乎也是不可取的,因为此操作应该只触发一次,而不是每次 ViewController2 出现时。添加一个变量只是为了跟踪操作是否已触发似乎不是最理想的。

另一种选择是将代码放在 ViewController2 的 viewDidLoad 中, 但会稍微延迟 dispatch_after ,确保代码不会影响转场。

处理这种模式的正确方法是什么?

是否还有另一个 UIViewController 函数应该用于此目的(即仅执行一次的代码,并且仅在 UIViewController 将自身呈现给用户之后)?

最佳答案

在高层次上,这是一个想法:

  1. 创建一个将您的“结果”作为属性的单例类。当 View Controller 2 请求它时,单例可以创建它(结果)如果它不存在(如果它确实存在,那么,你已经完成了)。

  2. 将长时间运行的作业插入操作队列,并让操作在完成后将委托(delegate)消息(或通知,无论您的船如何 float )发送回 View Controller 2。当 VC2 收到该消息时,它可以“刷新”。

  3. 根据该工作需要多长时间,您可能希望在 VC2 上放入微调器和/或加载消息,然后在“刷新”期间将其删除。

(我提到操作队列,主要是因为我喜欢它们。它可以是任何你喜欢的机制,关键是工作不在主线程上完成。)

关于ios - 在不延迟 UIViewController segue 的情况下运行 CPU 密集型代码?如何在 UIViewController 出现后*仅执行一次代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150679/

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