2013-08-26 43 views
-2

在我的程序中,我应该用几种模式初始化我的类而不创建新的实例。 这可能吗?也许单身?我想只有一个实例,并且不止一次调用init方法。有人能告诉我,如果这是可能是这样的:Objective-C类初始化或单例

[[MyObject sharedObject] initWithMode:mode1]; 

及更高版本:

[[MyObject sharedObject] initWithMode:mode2]; 
+2

你试图通过这样做解决什么问题?这看起来很奇怪。 –

+3

为什么不是'setMyObjectMode'而不是'initWithMode'这意味着初始化,所以也许是内存泄漏......? – Larme

+2

您应该**从不**在对象的整个生命周期中调用多个初始化方法。 @ Larme的建议很好。或者,根本不要使用单身。 – bbum

回答

1

一个单是不会帮助你在这里,正是因为它是一个共享实例。如果ObjectA在模式1中进入,然后ObjectB将无法在模式2中初始化它。即使ObjectB可以,它也会更改ObjectA期望与Singleton一起工作的上下文,这将导致意外的行为。

有几种方法可以解决这个问题,但是如果不知道更多你想要完成什么,那么我会建议每种模式的子类作为这些类的不同实例。