为什么我的图表如此不稳定?

时间:2012-08-20 19:15:18

标签: objective-c macos cocoa core-plot

我使用Core Plot创建了一个散点图。然而,我的图表需要动态刷新(不断添加和删除点)。我需要情节流畅,看起来像是“滑过图表”。相反,我似乎得到一个波涛汹涌的线,一次添加几个值,冻结,并再次添加几个值。可能导致这种行为的原因是什么?

-(void)updateDataWithVal:(double)percentageUsage
{
    if ([self.graphData count] >= 10)
    {
        [self.graphData removeLastObject];
    }
    [self.graphData insertObject:[NSNumber numberWithDouble:percentageUsage]  atIndex: 0];
    [self.graph reloadData];
}

以上是每次我想要更改图形时调用的函数。问题不在于数据正在更新。我调试了该函数并注意到数据正在流畅地更新(每秒添加一个点并从数据数组中删除)。问题在于图形实际上在变化。什么可能导致图形冻结并一次添加几个点(每6-7秒)而不是像数据一样每秒连续更新?

我怀疑这是由于在短时间内添加多个点造成的。每秒只删除一个点。此外,我的图表只有一个图。

我的图表在OSX 而不是 iOS上运行。所有代码都在Objective-C中。

1 个答案:

答案 0 :(得分:1)

根据要求,我可以将我的评论转换为答案,以便关闭。

Core Plot图表严重依赖于显示元素,因此必须在主线程上执行对它们的任何更新。否则,您将看到奇怪的渲染行为,如不一致的更新,可视化工件,并且您的应用程序很可能在某些时候崩溃。

我必须在我的一个Mac应用程序中执行相同的操作。为此,我使用后台GCD队列来处理数据采集和处理,以避免阻塞主线程。但是,每次我需要将结果插入到图形中并进行更新时,我使用dispatch_async()将相应的代码包装在要在主线程上执行的块中。这可以保护你免受像你在这里看到的那样的奇怪现象。