0

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

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

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

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

1 回答 1

1

想出了一个更好的答案。

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

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

所以,我的问题的答案是:使用系统框架,你甚至不会遇到这些问题!:) 但我的代码似乎与实际的最佳实践模式一致;请在此处查看 Apple 的指南和建议

于 2012-12-14T00:14:29.117 回答