有一种方法可以在不显示的情况下预加载模态视图控制器吗?我问是因为当我显示模态视图控制器(分配和初始化视图控制器类)时,视图加载和显示有一点延迟。之后,当我尝试再次显示时,延迟停止。
我正在使用UITableView
, 并在方法内部scrollViewDidEndDragging
检查 是否contentOffset.y
小于-90。如果是这样,用户基本上是“拉动刷新”,然后我正在加载视图。
有一种方法可以在不显示的情况下预加载模态视图控制器吗?我问是因为当我显示模态视图控制器(分配和初始化视图控制器类)时,视图加载和显示有一点延迟。之后,当我尝试再次显示时,延迟停止。
我正在使用UITableView
, 并在方法内部scrollViewDidEndDragging
检查 是否contentOffset.y
小于-90。如果是这样,用户基本上是“拉动刷新”,然后我正在加载视图。
您可以手动调用 viewWillAppear、viewDidLoad。
UINib
将 XIB 预加载到内存中。它会将 XIB 的对象树预解码到内存中,但不会实例化 XIB 中的对象。然后你可以调用 的instantiate
方法UINib
来实例化视图。
view
a (因为视图是延迟加载的,所以它会在第一次访问时从 XIB 加载)。UIViewController
view
但是由于您只能在主线程上实例化 UI 对象(来自您的 XIB)——因为每个 UI 组件和 UI 操作都必须在主线程中完成——您的应用程序仍将“冻结”(阻塞主线程)而你加载视图。例如,您不能将 XIB 的根 UIView 加载到单独的线程或队列中(如果您尝试这样做,您将遇到运行时异常)。
使用Instruments及其“时间分析器”工具来检查 XIB 文件的加载过程究竟需要时间。(也许解决起来很容易,或者你可能会有一些组件,只有在视图显示后才能延迟加载,等等)
您可以在 viewWillAppear 上加载视图的所有内容,然后将其显示。
或者,您可以加载 modalview 的所有属性,然后使用方法显示它。使视图成为属性。
您可以尝试访问视图,这将使 viewDidLoad 方法被调用,尽管这不是事情应该做的方式......
//Preload
YourViewController * controller = [[YourViewController alloc] init];
controller.view.backgroundColor = [UIColor whiteColor];
.
.
.
.
//Load Controller after time
[self presentModalViewController:controller animated:YES];