0

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

我希望立即推送视图控制器,然后在呈现视图控制器后让关卡自行布置,希望能提供更好的用户体验。我想这可以通过调用方法来实现,ViewDidAppear但我宁愿立即开始计算,以使事情尽可能快。

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

谢谢你的帮助!

4

2 回答 2

0

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

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

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

于 2012-07-29T07:03:08.977 回答
0

委托中没有可使用的神奇方法。您在问一个非常普遍的问题:如何在 iOS 中进行线程处理。

于 2012-07-29T11:11:00.300 回答