Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 最佳实践:视图控制器加载时间过长时该怎么办?_Objective C_Ios - Fatal编程技术网

Objective c 最佳实践:视图控制器加载时间过长时该怎么办?

Objective c 最佳实践:视图控制器加载时间过长时该怎么办?,objective-c,ios,Objective C,Ios,我需要一个建议,当我的视图控制器加载很长时间时该怎么办 在我的情况下,我用route me制作了一张离线地图,从大约100mb的数据库加载地图需要几秒钟,然后加载很多标记,将它们放在地图上,等等。 若我在viewDidLoad UI中运行此代码,那个么它看起来并没有响应,因为在按下tab或按钮后,在加载所有内容的几秒钟内什么都并没有发生。如果我将它放在ViewDidEmerge中,则在我退出此视图控制器并返回它之前,地图不会以某种方式显示。如果需要很长时间,您应该在将数据加载到后台线程时显示微调

我需要一个建议,当我的视图控制器加载很长时间时该怎么办

在我的情况下,我用route me制作了一张离线地图,从大约100mb的数据库加载地图需要几秒钟,然后加载很多标记,将它们放在地图上,等等。
若我在viewDidLoad UI中运行此代码,那个么它看起来并没有响应,因为在按下tab或按钮后,在加载所有内容的几秒钟内什么都并没有发生。如果我将它放在ViewDidEmerge中,则在我退出此视图控制器并返回它之前,地图不会以某种方式显示。

如果需要很长时间,您应该在将数据加载到后台线程时显示微调器或其他“忙碌”指示器

完成时间密集型流程后,将UI更新回主线程并隐藏微调器/忙碌指示器

在后台线程上执行代码非常容易-有几种方法可以做到-但最简单/最直接的方法可能是使用
performSelectorInBackground:withObject:
,如本例所示:

[self performSelectorInBackground:@selector(loadMap) withObject:nil];
当您准备再次在主线程上运行时,情况是一样的,但使用
performSelectorOnMainThread:withObject:waituntldone:

[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO];
祝你好运