1

在 iOS 5 中使用带有情节提要的选项卡时,其中一些在切换到它时可能需要很长时间才能初始化(例如,包含 GLKViewController 的选项卡)。

发生这种情况是因为此控制器中 viewDidLoad 方法的工作量可能非常大。

有没有办法在早期阶段初始化故事板中定义的特定视图控制器(并将其称为 viewDidLoad 方法) - 当应用程序启动时?完成此操作后,应消除延迟。

4

2 回答 2

1

您确定这是视图控制器的实例化而不是viewDidLoad方法吗?视图控制器可能都是在情节提要解包时创建的,但是视图控制器会尝试尽可能长时间地延迟加载其实际视图对象;在访问子类的属性viewDidLoad之前不会调用。viewUIViewController

所以解决这个问题的方法可能是手动访问视图属性:

__unused CGRect frame = [[tabBarController.viewControllers objectAtIndex:index] view].frame;

如果减速实际上是在实例化中,并且在您切换到该选项卡之前没有创建视图控制器,那么您将不得不通过以编程方式访问它来强制实例化视图控制器,就像在上面的示例中一样.

于 2012-06-02T16:05:12.650 回答
1

调用 vewcontroller 的框架或 .view 属性很可能会起作用,但我不建议您搞乱 viewcontroller 初始化和视图设置

由于以下原因

  • 您所做的更改将不是标准的,它们将是稍后会失控的技巧和技巧
  • 您所做的更改不会轻易带到您创建的其他项目中

如果我遇到这样的问题,我会例如在应用程序委托中单独创建 GLKViewController 并将其保存在那里,直到在 viewController 中调用 viewDidLoad,然后我会将这个初始化的 GLKViewController 移动到 viewController

于 2012-06-02T16:11:40.607 回答