【问题标题】:How to ensure that all the UIViewController objects in the project are being created only once?如何确保项目中的所有 UIViewController 对象只被创建一次?
【发布时间】:2012-06-23 10:17:05
【问题描述】:

在我目前正在处理的项目中,创建和使用了很多UIViewController 对象(一些UIViewController 子类)。相信我,它制造了很多问题。我正在研究它(某种重构)。

正如我所见,大多数(那些)对象只需要初始化一次并多次使用。由于我将从现在开始从事这个项目(而且该项目的持续时间很长),我如何确定每个 UIViewController Subclass 对象一次只存在一个。

我怀疑我是否应该制作所有UIViewControllers Singleton。如果是这样,我应该如何实施。意义;我应该初始化applicationDidFinishedLaunching:WithOptions 中的所有对象还是在哪里?

另一个问题是:(我认为可能不是真的)项目中的所有UIViewController 都应该是单例吗?

【问题讨论】:

  • 请记住,如果您最终使用singleton 模式方法,您的视图控制器将在应用程序的整个生命周期内保留在内存中,如果管理不当可能会导致内存问题(取决于关于视图控制器的内存占用)
  • @danielbeard 是的,你提到了非常重要的一点。
  • 如果使用得当,Singleton 将是一个很好的方法......否则,你最终可能会使用太多内存......我经历过...... :)

标签: iphone objective-c ios architecture uiviewcontroller


【解决方案1】:

如果您希望它们只是每个子类的一个对象,那么将它们设为单例并不是一个坏主意,

如果您将它们设为单例,请不要在 applicationDidFinishedLaunching:WithOptions 中初始化它们,而是在需要时立即初始化它们(阅读有关延迟初始化的更多信息)

但是我建议将每个 webView 都设置为 Appdelegate 的属性,这样每当您需要它们时,您都可以从 appDelegate 中获取它们

【讨论】:

    【解决方案2】:

    如果你想确保项目中的所有 UIViewController 对象只被创建一次,那么唯一的方法就是 Singleton。而且您不需要在 applicationDidFinishLaunching 中初始化它们。你可以在任何地方初始化它们(通常是你需要它们的地方)。

    转到正确创建单例的链接:http://cocoasamurai.blogspot.in/2011/04/singletons-your-doing-them-wrong.html

    来源:Make UIViewController a singleton?

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2011-01-22
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2022-11-02
      相关资源
      最近更新 更多