2012-07-19 58 views
1

我有一个视图可以在我的应用程序的不同屏幕上显示。我不想分配和初始化每个屏幕的视图。我认为这可以通过两种方法来完成:我应该为我的视图控制器使用singelton吗?

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

2)使视图单代替

现在,关于Singleton模式一般是好还是坏,一直存在很多争论。另外,我知道使用单身视图控制器被认为是bad idea

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

回答

1

使用单例并不是一个坏主意,它实际上是一个坚实的模式,允许在整个应用程序生命周期中存储快速访问的数据。 NSUserDefaults,NSFileManager,NSNotificationCenter和许多其他Apple默认类使用单例模式。如果你的视图占用太多内存(例如它有很多沉重的图形资源),那么你应该有一个类,每次调用它时创建该视图并将其加载到内存一段时间,即视图用于英寸如果您的视图重量轻,您应该静态创建它,并保持它在整个应用程序的生命周期中使用单例类。

0

使用单例或使用您的应用程序委托的属性是完成同样事情的等效方法。人们也可以使用传递给所有“利益相关方”的共同结构。

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

然而,要警惕的是,最终会导致数十个或数百个单身人士 - 这通常表明您的设计没有经过深思熟虑。

0

单身是现代的全局变量,所以我尽量避免它们,除非绝对必要。使用Apple的低内存全局变量导致Carbon移植时出现各种问题。

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

0

我有一个视图可以在我的应用程序的不同屏幕上显示。 I 不想分配并初始化来自每个屏幕的视图。

为什么难道你不想创建视图,因为你需要它吗?视图使用大量内存:

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

  • 视网膜显示屏上的相同视图需要1个。2MB

仅仅因为这个原因,只在你真正需要它的时候分配你的通用视图似乎是一个非常好的主意。没有显示时挂在视图上没有什么可以获得。

相关问题