1

我有这个问题,我有一个名为“GraphGenerator”的类,其他类可以调用它来传递一个视图,以使该视图填充一个图形。这个 GraphGenerator 类是一个单例

+ (GraphGenerator *)sharedInstance
    {
        static GraphGenerator *sharedInstance;
        static dispatch_once_t once;
        dispatch_once(&once, ^{
            //allochiamo la sharedInstance
            sharedInstance = [[self alloc] init];
        });
        return sharedInstance;
    }

这个类在制作图表时使用了一些综合属性,如 _graphType 和 _graphData。

    -(void)generateGraphInView:(CPTGraphHostingView*)hostingView ofType:(NSUInteger)type withData:(NSArray*)data andStyle:(NSUInteger)style{

        _graphData=[NSMutableArray arrayWithArray:data];
        _graphStyle=style;
        _graphType=type;

问题是,当我在 ViewController 中的这个单例上开始多次调用时,GraphGenerator 开始制作图形但不是一次。似乎该类将所有图形一起完成,更改了合成的属性值并产生了问题..例如,我在方法上进行了这两个调用

[[GraphGenerator sharedInstance]generateGraphInView:graphHost01 ofType:DAILY withData:[_dataDictionary valueForKey:@"day share"] andStyle:BARCHART];

[[GraphGenerator sharedInstance]generateGraphInView:graphHost02 ofType:WEEKLY withData:[_dataDictionary valueForKey:@"week share"] andStyle:BARCHART];

_graphType 设置为 DAILY 之后它被设置为 WEEKLY,但设置得太快以至于第一次调用仍在生成他的图表,此时,它是每周而不是每天生成的。

那么我可以实现什么?我想过互斥锁或类似的东西,但我不知道如何实现。谢谢

4

2 回答 2

1

创建一个 UIView 的子类来管理自己的图形创建将为您提供一个没有 Singleton 的解决方案。

我们之前使用过 CorePlot 来实现峰值,我们让它像这样工作。

教程应该为您提供大部分结构。

于 2013-07-29T14:40:26.383 回答
0

你可以在你的方法中加入同步

-(void)generateGraphInView:(CPTGraphHostingView*)hostingView ofType:(NSUInteger)type withData:(NSArray*)data andStyle:(NSUInteger)style{
    @synchronized(self) {

        // your code
    }
}
于 2013-07-29T14:09:56.327 回答