Objective c 最佳实践:视图控制器加载时间过长时该怎么办?
我需要一个建议,当我的视图控制器加载很长时间时该怎么办 在我的情况下,我用route me制作了一张离线地图,从大约100mb的数据库加载地图需要几秒钟,然后加载很多标记,将它们放在地图上,等等。Objective c 最佳实践:视图控制器加载时间过长时该怎么办?,objective-c,ios,Objective C,Ios,我需要一个建议,当我的视图控制器加载很长时间时该怎么办 在我的情况下,我用route me制作了一张离线地图,从大约100mb的数据库加载地图需要几秒钟,然后加载很多标记,将它们放在地图上,等等。 若我在viewDidLoad UI中运行此代码,那个么它看起来并没有响应,因为在按下tab或按钮后,在加载所有内容的几秒钟内什么都并没有发生。如果我将它放在ViewDidEmerge中,则在我退出此视图控制器并返回它之前,地图不会以某种方式显示。如果需要很长时间,您应该在将数据加载到后台线程时显示微调
若我在viewDidLoad UI中运行此代码,那个么它看起来并没有响应,因为在按下tab或按钮后,在加载所有内容的几秒钟内什么都并没有发生。如果我将它放在ViewDidEmerge中,则在我退出此视图控制器并返回它之前,地图不会以某种方式显示。如果需要很长时间,您应该在将数据加载到后台线程时显示微调器或其他“忙碌”指示器 完成时间密集型流程后,将UI更新回主线程并隐藏微调器/忙碌指示器 在后台线程上执行代码非常容易-有几种方法可以做到-但最简单/最直接的方法可能是使用
performSelectorInBackground:withObject:
,如本例所示:
[self performSelectorInBackground:@selector(loadMap) withObject:nil];
当您准备再次在主线程上运行时,情况是一样的,但使用performSelectorOnMainThread:withObject:waituntldone:
:
[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO];
祝你好运