每毫秒使用performSelectorOnMainThread的问题

时间:2012-01-03 13:16:51

标签: iphone ipad audiotoolbox remoteio

我想通过图表在UIView上显示实时声音的幅度。

我将声音采样率设置为1000秒。

而且,为了更新图表,我确实喜欢这个。这是每毫秒调用的。

[Audio performSelectorOnMainThread:@selector(updateGraph) withObject:nil waitUntilDone:NO];

和updateGraph内部是这样的。

- (void) updateGraph{
    [graphview setNeedsDisplay];
}

但它有角度地绘制图形。

http://achievstar.tistory.com/234 (我是这个网站的新手,所以我无法上传图片)

(我猜)这是因为“waitUntilDone:NO”。

iphone 4S和iPad2也无法赶上1000的速度。

我也为“waitUntilDone”尝试了“YES”。它画得恰到好处,

http://achievstar.tistory.com/234 (见下图)

但是,这些设备无法赶上1000的速度,

所以这样,绘图速度很慢。

有没有办法更好地修复图表?

我真的在这里,我甚至找不到更好的解决方案。

2 个答案:

答案 0 :(得分:0)

performSelectorOnMainThread函数主要用于后台线程,并且想要返回主线程或者想要在主线程上执行函数。

如果您没有使用任何线程或后台线程,则无需使用performSelectorOnMainThread函数。你可以直接调用那个函数。

尝试使用简单的自我调用updateGraph

即[self updateGraph];然后看结果..

答案 1 :(得分:0)

我自己得到了答案!

我每隔一毫秒就收到声音输入,

并在'它内部我也在每毫秒更新了图表。

这意味着我在一毫秒内更新了480的每个fixel。

我想当我收到声音输入时我应该立即更新图表

顺利显示图表。

但我错了。没有必要更新每个fixel。

因为这需要很多过程。

所以我改变了代码来更新UI而不是每毫秒。它的效果非常好。