【问题标题】:Instantiating nib lazily in UIViewController's view property accessor在 UIViewController 的视图属性访问器中懒惰地实例化 nib
【发布时间】:2012-12-13 21:54:47
【问题描述】:

在我目前正在处理的应用程序中,有一种情况是我有 2 个屏幕用于显示一组数据:一个是列表,一个是地图。每个屏幕都有自己的视图控制器。默认屏幕是列表视图,因此首先加载视图控制器。但是另一个地图屏幕视图控制器也被加载和设置(因为它封装了列表屏幕视图控制器使用的一些与地理地图相关的数据),即使地图屏幕尚不可见。

但是,我不希望在用户切换到该屏幕之前加载和初始化地图屏幕视图控制器的 nib 和视图。

在地图屏幕视图控制器中覆盖view 属性访问器(如下面的代码)并延迟加载/实例化笔尖有什么问题吗? (在地图屏幕即将显示之前,view 属性不会被访问,就在地图屏幕视图控制器的 viewDidLoad 方法被调用之前。)我已经测试过这很好用,但我从未见过它这样做。

- (UIView *)view {
    if (!_view) {
        UINib *nib = [UINib nibWithNibName:@"MyNibName" bundle:nil];
        [nib instantiateWithOwner:self options:nil];
    }
    return _view;
}

【问题讨论】:

    标签: objective-c ios uiviewcontroller nib


    【解决方案1】:

    想出了一个更好的答案。

    我正在使用的代码实际上并不是我自己的,而且我没有注意到地图屏幕的视图控制器实际上不是 UIViewController 的子类,它只是 NSObject 的子类(并添加它自己的view 属性)。

    通过将地图屏幕的视图控制器更改为实际继承自UIViewController,然后使用initWithNibName:bundle: 的指定初始化程序,笔尖默认view 时延迟加载/实例化属性被访问——就像我在做的那样。

    所以,我的问题的答案是:使用系统框架,你甚至不会遇到这些问题! :) 但我的代码似乎与实际的最佳实践模式一致; see Apple's guidelines and recommendations here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2013-08-19
      • 2010-11-11
      相关资源
      最近更新 更多