1

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

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

4

4 回答 4

0

您可以手动调用 viewWillAppear、viewDidLoad。

于 2012-10-08T13:36:55.077 回答
0
  • 您可以使用UINib将 XIB 预加载到内存中。

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

  • 您还可以通过调用其 getter 方法来强制加载viewa (因为视图是延迟加载的,所以它会在第一次访问时从 XIB 加载)。UIViewControllerview

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


使用Instruments及其“时间分析器”工具来检查 XIB 文件的加载过程究竟需要时间。(也许解决起来很容易,或者你可能会有一些组件,只有在视图显示后才能延迟加载,等等)

于 2012-10-08T13:36:55.067 回答
0

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

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

于 2012-10-08T13:38:28.660 回答
0

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

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

.
.
.
.

//Load Controller after time
[self presentModalViewController:controller animated:YES];
于 2012-10-08T13:39:09.467 回答