Iphone sdk与类变量共享的实例

时间:2013-07-29 13:43:58

标签: ios singleton

我有这个问题,我有一个名为“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,但设置得太快以至于第一个调用仍在生成他的图形,此时,它是按周而不是每天生成的。

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

2 个答案:

答案 0 :(得分:1)

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

我们以前使用CorePlot作为峰值,我们让它像这样工作。

这个tutorial应该为您提供大部分结构。

答案 1 :(得分:0)

您可以在方法中进行同步

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

        // your code
    }
}