4

我已经有这样的问题了,但无论如何我已经删除了它。

我有一个非常简单的应用程序,它有一个根视图控制器,它在其他两个视图控制器视图之间切换。所以在我的根视图控制器中,它会延迟加载另外两个视图控制器的实例。每次按下工具栏中的切换按钮时,正在显示的当前视图控制器(其视图)被卸载(设置为 nil),并且新的视图控制器被加载并添加到子视图中。

由于我加载视图控制器并在特定时间卸载,getter 中的延迟加载代码非常令人困惑,因为我实际上不想在使用它们时立即加载它们,我需要先加载它们以便翻转动画看起来不错。所以我想我想让 loadFirstVC 和 loadSecondVC 方法来加载视图控制器。这是一个好主意吗?

4

1 回答 1

6

延迟加载的主要原因不是推迟肯定会发生的加载。它用于延迟可能永远不需要的加载。(当数据发生变化时强制重新加载也很有用,但这不是你的问题。)

示例:假设您有一堆关于一个人的数据,包括一张照片,这些数据存储在一个外部文件中。但是只有当用户转到子视图时才会显示照片,所以为什么要从文件中加载照片,直到您确定子视图会出现?繁荣,使用延迟加载。

当您知道要加载某条数据时,何时加载它就不太重要了。

什么时候重要?嗯,这确实是一个优化问题。你可能听说过一句话;如果你还没有,那么这就是最好的时机:“过早的优化是所有(编程)邪恶的根源。”

所以问自己两个问题:

  1. 一定会需要这些数据吗?如果否,请继续使用延迟加载技术。如果是,请转到问题 2。

  2. 加载数据时是否重要?[一个例子是,它很大,我不想加载它,直到我卸载其他东西为它腾出空间]如果不是,把它放在任何可以工作的地方。如果是...回来再次询问我们,并提供更多详细信息。

...我怀疑这不能回答您最初的问题,但听起来您可能一开始就问错了问题。抱歉,如果我弄错了。

于 2009-08-05T05:26:42.877 回答