iOS开发:如何在将视图控制器推入导航堆栈之前预先加载视图控制器?

Bea*_*red 13 iphone ipad adwhirl ios

我正在深入iOS开发,我正在构建一个益智游戏,以帮助我熟悉该平台.我有AdWhirl在用户完成拼图时显示的分数屏幕中显示广告.问题是,分数屏幕视图控制器至少需要几秒钟来请求和接收广告,在此时用户查看分数并移动到不同的视图.我计划在用户解决谜题时实现动画,动画完成所需的时间是请求和接收将在下一个(得分)视图中显示的广告的好时机也将被采取.

在解谜动画正在进行的过程中,当我将视图控制器推到导航堆栈时,如何预加载下一个视图控制器以便广告存在?如果这是不可能的,或者这是一个坏主意,您对动画发生时我如何请求和接收广告有什么建议吗?

非常感谢您的智慧!

注意:对于那些不熟悉AdWhirl的人来说,请求和接收广告的过程很简单.在视频控制器的viewDidLoad方法中,您希望广告显示在其中,您创建AdWhirlView(UIView的子类),将其添加为子视图,并调用请求广告的方法.广告到达时,会调用委托方法将其显示在父视图中.

jak*_*eld 30

有是与只使用[的viewController的loadView],那就是viewDidLoad中不会被自动视图加载之后称为副作用.

要正确执行并确保调用viewDidLoad,而不是自己调用loadView,您可以使用实例化UIViewController的视图

  UIView *view = myViewController.view;
Run Code Online (Sandbox Code Playgroud)

要么

  UIView *view = [myViewController view];
Run Code Online (Sandbox Code Playgroud)

这将调用loadView(如果视图尚未加载),然后在视图加载完成后调用viewDidLoad.


Mik*_*ler 14

响应接受的答案,您不得手动调用-loadView.从文档:

你永远不应该直接调用这个方法.视图控制器在请求其view属性但当前为nil时调用此方法.此方法加载或创建视图并将其分配给view属性.

相反,你应该只调用[myViewController视图],这将触发视图加载.

一如既往,请阅读文档!


Vde*_*edT -3

你可以手动调用loadView,我不知道是否有任何副作用,但我不这么认为。

感谢 Tommy,确实,访问 view 属性可确保仅在视图层次结构尚未加载时才有效调用 loadView,从而避免在 loadView 代码确实处理它时出现任何潜在的泄漏。

  • 这有一个潜在的不良副作用——如果视图已经加载,那么 loadView 很可能会导致泄漏。最好只访问视图控制器上的“view”属性(无需对其执行任何操作),这将导致它加载视图(如果尚未加载)。 (13认同)