我可以将参数传递给Swift中的Singleton类吗?和一般的单身人士使用

时间:2017-02-10 00:07:50

标签: swift singleton

是否可以将参数传递给Singleton类?如果是这样的话?

这是我的一个Singleton类的片段:

class NotificationManager: NSObject {

static let sharedManager = NotificationManager()
var tabBarController: UITabBarController!

private override init() {
    super.init()
}

对于此Singleton,必须始终在使用之前设置公共属性tabBarController

我想知道是否有可能在启动时传递正确的UITabBarcontroller对象,因为我认为这是我的Singleton类被实例化的时候?这样可以防止类被错误地实现。并不是说我曾经认为这是一个问题。

此外,在这种情况下使用Singleton类是否完美无缺?管理一组特定的操作?在过去,我总是传递物体,尤其是managedObjectContext,但是现在我发现Singleton类可以使大型应用程序中的所有内容更清晰,更好,更安全(因为只有一种姿态)。我可以理解类之间的传递对象对于较小的应用程序来说很好,但是一旦它们变大,它就会变得非常混乱。

在我最近的应用程序中,我还在iOS和watchOS应用程序之间使用共享的Singleton类,它定义了一些全局变量,例如服务器端点和环境。这似乎是定义需要此访问权限的变量的最佳方法。

我有朋友告诉我,单身人士使用起来不好,而且从谷歌的角度来看,它看起来真的很混乱。就我而言,它们使我的代码更易于管理和处理。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以随意设置单身人士。您只需要改变它初始化/组织的方式。 this question中有一些例子。对于模式的一些一般批评,你可以read here

我自己的观点是,避免单身人士通常是好事,但有时他们是必要的。但是,我倾向于说只有当应用程序启动时可以初始化(App Delegate)时才能使用单例,并且可以/应该在整个应用程序的生命周期内使用和存活。

我会警告不要使用与您的用户界面有关的单身人士。看来你正在捕获一个UITabBarController。我强烈建议不要这样做,而是使用委托或Notifications来回应事件。这部分是因为一般设计的怪异,但它也使应用程序恢复和应用程序的内存占用变得复杂。

相关问题