我有一个要从我的应用程序中的不同屏幕显示的视图。我不想从每个屏幕分配和初始化视图。我认为这可以使用两种方法来完成:
1) 在 App Delegate 中初始化视图并从所有屏幕访问相同的视图。(注意:我不想在窗口上添加视图,因为我的应用程序只支持横向,这将导致大量意大利面条代码来管理视图方向。)
2)改为使视图单例
现在,关于单例模式总体上是好是坏的争论很多。另外,我知道将单例用于视图控制器被认为是个坏主意。
有没有更好的方法来实现这一目标?
我有一个要从我的应用程序中的不同屏幕显示的视图。我不想从每个屏幕分配和初始化视图。我认为这可以使用两种方法来完成:
1) 在 App Delegate 中初始化视图并从所有屏幕访问相同的视图。(注意:我不想在窗口上添加视图,因为我的应用程序只支持横向,这将导致大量意大利面条代码来管理视图方向。)
2)改为使视图单例
现在,关于单例模式总体上是好是坏的争论很多。另外,我知道将单例用于视图控制器被认为是个坏主意。
有没有更好的方法来实现这一目标?
使用单例并不是一个坏主意,它实际上是一种可靠的模式,允许在整个应用程序生命周期中存储快速访问的数据。NSUserDefaults
,NSFileManager
和NSNotificationCenter
许多其他 Apple 默认类使用单例模式。如果您的视图占用了太多内存(例如,它上面有很多繁重的图形资源),那么您应该有一个类在您每次调用它时创建该视图并将其加载到内存中一段时间如果你的视图是轻量级的,你应该静态地创建它,并使用单例类在整个应用程序的生命周期中保持它的活动状态。
单例是现代的全局变量,所以除非绝对必要,否则我会尽量避免使用它们。在移植到 Carbon 时,使用 Apple 的低内存全局变量会导致各种问题。
如果您正在维护库,请注意每个库都会有一个单例实例,因此您需要小心谁在访问它们。我在 Loki 单例实现 (C++) 中遇到了这个问题,尽管 Objective-C 单例也会有同样的问题。
我有一个要从我的应用程序中的不同屏幕显示的视图。我不想从每个屏幕分配和初始化视图。
为什么不想根据需要创建视图?视图使用大量内存:
非视网膜 iPhone 上的半屏视图 (240*320) 仅用于像素就需要 300KB。
视网膜显示器上的相同视图需要 1.2MB
仅出于这个原因,仅在您真正需要时分配您的共同视图似乎是一个非常好的主意。当视图不显示时,挂在视图上没有任何好处。
使用单例或使用应用程序委托的属性是完成相同事情的等效方法。也可以使用传递给所有“相关方”的通用结构。
你选择哪一个取决于你——“理想”的选择取决于具体情况。
但是,要小心以数十或数百个单例结束——这通常表明您的设计没有经过深思熟虑。