我应该为视图控制器使用单例吗?

时间:2012-07-19 12:43:19

标签: iphone objective-c ios ipad design-patterns

我的视图会在我的应用中的不同屏幕上显示。我不想从每个屏幕分配和初始化视图。我认为这可以通过两种方法来完成:

1)初始化App Delegate中的视图并从所有屏幕访问该视图。 (注意:我不想在窗口上添加视图,因为我的应用程序仅支持横向方向,这将导致很多意大利面条代码来管理视图方向。)

2)改为使用单身视图

现在,关于Singleton模式一般是好还是坏的问题一直存在争议。另外,我知道对视图控制器使用单例视为bad idea

有没有更好的方法来实现这个目标?

4 个答案:

答案 0 :(得分:1)

使用单例并不是一个坏主意,它实际上是一个可靠的模式,允许在整个应用程序生命周期中存储快速访问的数据。 NSUserDefaultsNSFileManagerNSNotificationCenter和许多其他Apple默认类都使用单例模式。如果你的视图占用太多内存(例如它上面有很多繁重的图形资源),那么你应该有一个类,每次调用它时都会创建该视图并将其加载到内存中一段时间​​后视图如果您的视图重量很轻,您应该静态创建它并使用单例类在整个App的生命周期中保持活动状态。

答案 1 :(得分:0)

使用单例或使用app委托的属性是完成相同操作的等效方法。人们也可以使用传递给所有“利益相关方”的共同结构。

您选择的取决于您 - “理想”选择取决于具体情况。

但是,要注意结束几十个或几百个单身人士 - 这通常表明你的设计没有经过深思熟虑。

答案 2 :(得分:0)

单身人士是现代的全球变量,所以除非绝对必要,否则我会尽量避免使用它们。使用Apple的低记忆全局变量在移植到Carbon时会引起各种各样的问题。

如果您要维护库,请注意每个库都会有一个单例实例,因此您需要注意访问它们的人员。我使用Loki单例实现(C ++)遇到了这个问题,尽管Objective-C单例也会有同样的问题。

答案 3 :(得分:0)

  

我的视图会在我的应用中的不同屏幕上显示。一世   不希望从每个屏幕分配和初始化视图。

为什么您不想根据需要创建视图?视图使用大量内存:

  • 非视网膜iPhone上的半屏视图(240 * 320)只需要300像素的像素。

  • 视网膜显示器上的相同视图需要1.2MB

仅凭这个原因,只有在您真正需要时才分配您的公共视图似乎是一个非常好的主意。当视图没有显示时,挂在视图上没有任何好处。