(多线程?)与推送视图控制器相结合

时间:2012-07-29 06:57:57

标签: iphone objective-c ios multithreading

我正在为拥有几百级别的iphone创建一款游戏。当用户按下开始按钮时,这些都被加载到滚动视图中,以便他们可以选择一个级别。但是,我需要进行大量计算,从键控编码器加载每个级别的数据,然后在滚动视图上绘制UIImageView,然后才能向用户显示屏幕。就像现在一样,这都是我从viewDidLoad调用的方法完成的,所以这一切都发生在视图控制器被推入堆栈之前。因此,当用户按下此按钮时会有明显的延迟。

我希望立即推送视图控制器,然后在视图控制器出现后让关卡自己出来,希望提供更好的用户体验。我想通过调用ViewDidAppear中的方法可以做到这一点,但我宁愿立即开始计算,以便尽可能快地完成任务。

有办法做到这一点吗?可能使用宏中央调度或将工作分配给另一个线程?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果您希望在开始复杂计算之前首先加载UI内容(但不一定要显示),请将代码保留在-viewDidLoad方法中,但在[super viewDidLoad]调用后插入。如果计算不涉及必须仅在主线程(即UI)上操作的对象,请使用Grand Central Dispatch为使用dispatch_async()执行的计算设置异步队列。

编辑:我现在明白你正在使用UINavigationController将此视图推送到堆栈,并且计算都会对UI产生直接影响,这意味着它们必须在主线程上发生。因此,我建议将代码放在-viewWillAppear:方法中。这样,系统应该在调用计算之前推送视图。

可选地,在viewDidLoad:方法中,您可以调用另一个仅执行计算的方法,并将结果存储在异步线程的变量中。然后,该应用可以在viewDidLoad:中阅读这些计算。

答案 1 :(得分:0)

在委托中没有神奇的方法可供使用。您在问一个超级一般性问题:如何在iOS中进行线程化。