是否可以将参数传递给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类,它定义了一些全局变量,例如服务器端点和环境。这似乎是定义需要此访问权限的变量的最佳方法。
我有朋友告诉我,单身人士使用起来不好,而且从谷歌的角度来看,它看起来真的很混乱。就我而言,它们使我的代码更易于管理和处理。
感谢。
答案 0 :(得分:1)
您可以随意设置单身人士。您只需要改变它初始化/组织的方式。 this question中有一些例子。对于模式的一些一般批评,你可以read here
我自己的观点是,避免单身人士通常是好事,但有时他们是必要的。但是,我倾向于说只有当应用程序启动时可以初始化(App Delegate)时才能使用单例,并且可以/应该在整个应用程序的生命周期内使用和存活。
我会警告不要使用与您的用户界面有关的单身人士。看来你正在捕获一个UITabBarController。我强烈建议不要这样做,而是使用委托或Notifications来回应事件。这部分是因为一般设计的怪异,但它也使应用程序恢复和应用程序的内存占用变得复杂。