2012-04-05 122 views
1

我有一个在整个应用程序中使用的单例类。我正在研究另一个需要将数据发送到这个单例类的类,但是可以发送一堆数据来冻结主线程。在Objective C中创建单例类的另一个实例

我应该创建此单例类的另一个实例还是应该创建一个数据导入实用程序作为单独的类?

+2

不要太挑剔,但是,如果你创建另一个实例,它会停止作为一个单例,并失去保证只有一个对象的任何值。也许这没关系,但是你已经将你的模式从singleton改为对象池(或其他)。 – 2012-04-05 20:36:49

+0

虽然有缺陷,但我很乐意看到有人发明了这个doubleton。 – CodaFi 2012-04-05 20:43:02

+0

doubleton很有趣 – iosdevnyc 2012-04-05 20:48:34

回答

5

单身人士,顾名思义,意味着只有一个实例在其周围浮动。冻结主线程的数据应该被调度,另一个类的实例不会帮助。

0

创建所有你想要的另一个实例,但不要再称它为单例。

+0

创建另一个实例会打破基于singleton的模式和所有应用程序逻辑。这是一个糟糕的做法。 – 2012-04-05 20:42:05

+0

取决于该程序其余部分与单身性质的相关程度。我看到了一些以前的单例类被重建为允许多个实例的情况。 – 2012-04-05 20:44:11

0

实际上,您应该在另一个线程中发送此数据,并且可能在发送数据时使用NSLock,这样您就没有任何访问错误。

用途:

[self performSelectorOnBackGround:@selector(sendDataToSingleton:) withObject:@"data to send"]; 

不要创建单独的类或应用程序的其余部分的另一个实例将无法访问它,因为它是一个单例。

希望它有帮助。

0

根据定义,你应该只有一个单例实例。如果它是一个正确构建的单身人士,它不应该有可能超过1!

如果遇到主线程无响应的问题,请将需要加载的数据分解为较小的卡盘。这样,在加载不同的数据块之间,主线程可以处理它需要的任何事件,而其他对象可以访问单例中的数据。

你也可以实现一个懒惰的数据加载机制,当一个对象想要来自单例的信息时,单例会检查你的新类是否在等待给它新的信息然后加载它。

相关问题