我需要一个建议,当我的 View Controller 加载时间过长时该怎么办?
在我的情况下,我有一个用 route-me 制作的离线 map ,从大约 100mb 的数据库加载 map 需要几秒钟,然后加载很多标记,将它们放在 map 上,等等。 如果我在 viewDidLoad UI 中运行此代码似乎没有响应,因为在按下选项卡或按钮后,在加载所有内容的几秒钟内没有任何反应。如果我把它放在 viewDidAppear map 中,直到我退出这个 View Controller 并返回它之前,它根本不会显示。
最佳答案
如果需要很长时间,您应该在在后台线程上加载数据 时显示微调器或其他“忙碌”指示器。
完成耗时的过程后,在主线程上更新 UI 并隐藏微调器/忙碌指示器。
在后台线程上执行代码非常容易 - 有几种方法 - 但最简单/最直接的方法可能是使用 performSelectorInBackground:withObject:
,如本例所示:
[self performSelectorInBackground:@selector(loadMap) withObject:nil];
当您准备好再次在主线程上运行时 - 这是同样的事情,但是使用 performSelectorOnMainThread:withObject:waitUntilDone:
反过来:
[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO];
祝你好运。
关于objective-c - 最佳实践 : what to do when view controller is loading very long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353091/