objective-c - 最佳实践 : what to do when view controller is loading very long?

标签 objective-c ios

我需要一个建议,当我的 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/

相关文章:

iphone - 当两个线程写入同一个对象时会发生什么?

objective-c - 无法获取SMTP代码进行编译

ios - 使用 Aspect Fill 图像模式的奇怪的 UIPageViewController 滑动行为

ios - 用于在多个 ViewController 上显示标签的自定义 UIView?

ios - 使用 bezierPathWithOvalInRect 绘制时边框被剪裁

ios - 接收来自 Sinch、Swift 3 的推送通知

ios - setNeedsDisplay 不刷新屏幕

ios - subview 约束打破父 View 约束

objective-c - LLVM编译器推导instancetype

objective-c - 在哪里可以找到 iPad 示例代码