Objective c 为什么我的图表如此起伏?

Objective c 为什么我的图表如此起伏?,objective-c,macos,cocoa,core-plot,Objective C,Macos,Cocoa,Core Plot,我用核心图创建了一个散点图。但是,我的图表需要动态刷新(不断添加和删除点)。我需要的情节是流畅的,似乎是“滑过图形”。相反,我似乎得到了一条断断续续的线,它一次添加了几个值,冻结了,然后又添加了几个值。是什么导致了这种行为 -(void)updateDataWithVal:(double)percentageUsage { if ([self.graphData count] >= 10) { [self.graphData removeLastObject

我用核心图创建了一个散点图。但是,我的图表需要动态刷新(不断添加和删除点)。我需要的情节是流畅的,似乎是“滑过图形”。相反,我似乎得到了一条断断续续的线,它一次添加了几个值,冻结了,然后又添加了几个值。是什么导致了这种行为

-(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中。

根据要求,我可以将我的评论转换为答案,这样就可以结束了

核心绘图图严重依赖于显示元素,因此对它们的任何更新都必须在主线程上执行。否则,您将看到奇怪的呈现行为,如不一致的更新、视觉瑕疵,并且您的应用程序很可能会在某个时候崩溃


我必须在我的一个Mac应用程序中执行与您描述的相同的操作。为此,我使用一个后台GCD队列来处理数据采集和处理,以避免阻塞主线程。但是,每次我需要将结果插入到图中并更新它时,我都会使用
dispatch\u async()
将适当的代码包装到一个块中,以便在主线程上执行。这应该可以防止出现像您在这里看到的异常情况。

数据点添加是在一个紧密的循环中完成的,还是主线程以其他方式被绑定?听起来好像不允许主运行循环在每次数据点插入时运行其路线和更新UI,但它偶尔会被释放出来。@BradLarson感谢您的回答!1) 什么是紧密循环?2) 我怀疑这是否是由于主线程不能运行它的进程造成的-上面的函数是在一个单独的线程上运行的,因此它不会干扰主线程。所谓紧循环,我指的是一个for循环或一些很少或永远不会退出的其他迭代,从不允许主运行循环进入完成状态。但是,现在您已经提到了它,您应该知道对这个图的任何操作都需要在主线程上进行,因为我们在这里处理的是显示元素。否则,您可能会出现不规则的行为,甚至崩溃。@BradLarson不,没有紧循环。我需要我的图表不断更新,但是-如果我在主线程上运行这个,这不会冻结我的主线程吗?我怎么可能在主线程上运行一个不断更新的图表?@BradLarson谢谢!这很有魅力。你能不能把你的评论作为一个答案,这样我就可以选择它作为最好的答案?再次感谢你的帮助!