Iphone 为什么iOS 4.0上我的触摸事件频率较慢?

Iphone 为什么iOS 4.0上我的触摸事件频率较慢?,iphone,cocoa-touch,ios,ios4,Iphone,Cocoa Touch,Ios,Ios4,我正在写一个手指素描类型的应用程序,这个应用程序在iOS 3.0上运行得非常好。但是,在iOS 4.0或更高版本下运行应用程序会导致问题。具体来说,我在新操作系统上接收到的应用程序触摸事件比旧操作系统慢大约5倍。这显然会导致我的应用程序绘制不好,因为我要在两者之间绘制的数据点减少了5倍 有没有关于如何在iOS4上加快触摸事件频率的想法?无需阻塞主线程。您应该使用Shark评测代码,看看瓶颈在哪里。可能发生的情况是,在主线程上执行的某些代码(很可能是响应触摸而运行的代码)所用的时间比预期的要长,这

我正在写一个手指素描类型的应用程序,这个应用程序在iOS 3.0上运行得非常好。但是,在iOS 4.0或更高版本下运行应用程序会导致问题。具体来说,我在新操作系统上接收到的应用程序触摸事件比旧操作系统慢大约5倍。这显然会导致我的应用程序绘制不好,因为我要在两者之间绘制的数据点减少了5倍


有没有关于如何在iOS4上加快触摸事件频率的想法?

无需阻塞主线程。

您应该使用Shark评测代码,看看瓶颈在哪里。可能发生的情况是,在主线程上执行的某些代码(很可能是响应触摸而运行的代码)所用的时间比预期的要长,这会阻止应用程序接收触摸事件

某些图形操作在iOS4.x中比在3.x中所用的时间要长得多(大约慢2到10倍)。较长的图形执行时间可能会阻塞主UI线程,并且没有为主线程运行循环留出足够的时间来处理用户(触摸)事件


分析您的drawRect代码,看看它现在是否需要比一次刷新速率时间更长的时间。如果是这样,请尝试加快或分解图形渲染,或者尝试降低帧速率,看看这些是否有帮助。

我对绘制代码相当陌生,所以这里是我的一般策略。我正在对UIView进行子类化。在touchsmoved方法中,我有一个数组,用于存储需要绘制到视图的点。我还创建了一个间隔为0.03的计时器,当它被触发时,会调用setNeedsDisplay。我在viewDidLoad中声明了计时器,如下所示:timer=[NSTimer scheduledTimerWithTimeInterval:0.03目标:自选择器:@selector(timerFired:)userInfo:nil repeats:YES];这是正确的方法吗?或者我在这里运行线程的方式中遗漏了什么。我可以在一个单独的线程上画图,这样它就不会阻塞主线程(这样我就可以接收更多的触摸事件)?在确定计时器值是否正确之前,您需要了解drawRect代码需要多少时间。某些类型的CG绘图是线程安全的,但通常不是UI绘图代码。@aloo-听起来您在绘图代码中遇到性能问题已经有一段时间了:,因此您可能希望定期将绘图展平为位图,以避免出现某些速度减慢的情况。像往常一样,使用仪器来确定准确的热点。是的,这是真的!我对它进行了多次迭代,发现了一些适用于所有iphone4之前版本的产品。正如你所建议的,我已经以固定的间隔绘制到一个单独的图层上,但是对于iPhone4,我不得不放慢这个间隔。drawRect是否在主循环中运行?