预加载模态视图控制器

时间:2012-10-08 13:32:38

标签: objective-c

有一种方法可以预先加载模态视图控制器而不显示它吗? 我问,因为当我显示模态视图控制器(分配和初始化视图控制器类)时,视图加载和显示有一点延迟。 之后,当我再次尝试显示时,延迟就会停止。

我正在使用UITableView,在方法scrollViewDidEndDragging内,我检查contentOffset.y是否小于-90。如果是这样,用户基本上“拉到刷新”,然后我正在加载视图。

4 个答案:

答案 0 :(得分:0)

您可以手动调用viewWillAppear,viewDidLoad。

答案 1 :(得分:0)

  • 您可以使用UINib将XIB预加载到内存中。

它会将XIB的对象树预解码到内存中,但不会实例化XIB中的对象。然后,您可以调用instantiate的{​​{1}}方法来实现视图。

  • 你也可以通过调用UINib getter方法强制加载view的{​​{1}}(因为视图是延迟加载的,所以它将从XIB加载第一次访问时。)。

但是因为您只能在主线程上实例化UI对象(来自您的XIB) - 因为每个UI组件和UI操作都必须在主线程中完成 - 您的应用程序仍将“冻结”(阻止主要加载视图时。例如,您不能将XIB的根UIView加载到单独的线程或队列中(如果您尝试,则会有运行时异常)。


使用工具及其“Time Profiler”工具来检查XIB文件的加载过程需要花费多长时间。 (也许它很容易解决,或者你可能会有一些组件,你只能在显示视图后才能延迟加载等)。

答案 2 :(得分:0)

您可以在viewWillAppear上加载视图的所有内容,然后显示它。

或者,您可以加载模态视图的所有属性,然后使用方法显示它。使视图成为一个属性。

答案 3 :(得分:0)

您可以尝试访问该视图,这将使viewDidLoad方法被调用,虽然这不是应该做的事情......

//Preload
YourViewController * controller = [[YourViewController alloc] init];
controller.view.backgroundColor = [UIColor whiteColor];

.
.
.
.

//Load Controller after time
[self presentModalViewController:controller animated:YES];