当我的视图控制器加载很长时间时,我需要建议做什么?
在我的情况下,我有一个使用route-me制作的离线地图,从大约100mb的数据库加载地图需要几秒钟,然后加载大量标记,将它们放在地图上等等。 如果我在viewDidLoad中运行此代码,则UI似乎没有响应,因为在按下选项卡或按钮后,在所有内容都加载时几秒钟内没有任何反应。如果我把它放在viewDidAppear地图中,那么在我退出这个视图控制器并返回它之前,根本不会显示它。
答案 0 :(得分:5)
如果花费这么长时间,您应该在在后台线程上加载数据时显示微调器或其他“忙”指示符。
完成时间密集型过程后,请在主线程上更新UI并隐藏微调器/忙碌指示器。
在后台线程上执行代码非常简单 - 有几种方法可以做到 - 但最简单/最直接的方式可能是performSelectorInBackground:withObject:
,如下例所示:
[self performSelectorInBackground:@selector(loadMap) withObject:nil];
当你准备再次在主线程上运行时 - 它是相同的,但反过来使用performSelectorOnMainThread:withObject:waitUntilDone:
:
[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO];
祝你好运。